Unity Version: 2022.3

 

Unity의 예전 Input 시스템인 Input Manager에서 간혹 한글 상태일 때 Input이 동작되지 않는 문제가 있다.

 

정말 아주 가끔 발생하는 현상이라 큰 문제가 없어서 알고는 있어도 신경은 안 썼는데 특정 에셋을 사용할 때 항상 발생해서 원인을 확인해봤다.

 

        
        public static extern IMECompositionMode imeCompositionMode
        {
            [MethodImpl(MethodImplOptions.InternalCall)]
            get;
            [MethodImpl(MethodImplOptions.InternalCall)]
            set;
        }
        
        public static extern bool imeIsSelected
        {
            [MethodImpl(MethodImplOptions.InternalCall)]
            get;
        }

Unity의 Input에는 IME와 관련된 프로퍼티가 있다.

 

    public enum IMECompositionMode
    {
        //
        // 요약:
        //     Enable IME input only when a text field is selected (default).
        Auto,
        //
        // 요약:
        //     Enable IME input.
        On,
        //
        // 요약:
        //     Disable IME input.
        Off
    }

imeCompositionMode 라는 프로퍼티는 IMECompositionMode라는 enum 타입이다.

기본적으로 Unity는 Auto 상태이며 Legacy InputField 혹은 TMP_InputField가 선택되었을 때 On으로 바뀌고 해제되었을 때 Auto가 된다. Off 값은 Unity에서 기본적으로 사용하는 경우가 있는지는 모르겠다.

 

그리고 이 값은 임의로 값을 변경할 수 있다. 예를 들어 InputField를 선택해서 On이 되었는데 그 이후 임의로 Auto나 Off로 변경하는 게 가능하다. 값은 프로그램 단위로 구분되어서 그런지 Editor에서 값을 변경하면 그 값이 유지된다.

 

imeIsSelected라는 프로퍼티는 bool 타입이며 한영 전환 시 한글일 때 값이 true로 나온다.

 

값이 뭔지는 알아냈으니 이 값으로 2가지 상황에 대해서 테스트를 진행했다.

1. 일반적인 상황에서 IME 관련 값들이 어떻게 변하고 연관된 기능들이 어떻게 동작하는지

2. 임의로 IME 값을 변경했을 때 연관된 기능들이 어떻게 동작하는지

 

동작 결과는 Input.GetAxis("Vertical")와 Input.GetKey(KeyCode.W) 2가지로 W 키를 한영 전환하며 값이 나오는 것으로 확인했다.

  true false
Auto O O
On X O
Off O O

테스트 결과 IME가 On이고 한글 상태일 때 Input 값이 입력되지 않는 상황이 발생했다.

InputField에 입력 중이고 한글인 상태에서만 Input 값이 처리가 안 되고 영어라면 InputField에 값을 입력 중에도 Input 값이 처리가 된다.

 

상황에 따라 다르겠지만 컨텐츠를 개발할 때 플레이어나 카메라가 InputField에 값을 입력 중에 Input 값으로 동작하지 않도록 만든다고 생각한다면 값이 입력되지 않는 건 딱히 문제가 아니고 InputField 입력이 끝나면 다시 Auto로 변경되어서 한글 상태여도 Input 값이 정상적으로 처리된다.

 

문제는 한글 상태일 때 IME 상태가 임의로 On으로 설정되는 경우이다. InputField에서 한글로 입력을 끝낸 뒤 코드 상에서 임의로 On으로 변경한다면 Input 처리가 아무 동작도 하지 않는 상황이 되어버린다.

 

그리고 IME를 임의로 변경하는 것은 Input 값 외에도 InputField 자체에도 영향이 있다. 값을 입력 중에 임의로 On이 아닌 Auto 혹은 Off로 변경 시 영어로만 입력이 되며 한글 입력이 안 된다.

Posted by Heon_Dev
,