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로 변경 시 영어로만 입력이 되며 한글 입력이 안 된다.
'Unity Engine' 카테고리의 다른 글
Unity URP 빌드 이후 Scene을 불러오면 Scene이 어두워지는 현상 (SSAO 관련) (0) | 2023.04.04 |
---|---|
Unity를 종료할 때 종료를 중지하고 확인창 띄우기 (3) | 2022.06.13 |
Unity에서 Android Plugin을 활용해 APK 설치하기 (0) | 2022.02.28 |
Unity TextMeshPro TMP_FontAsset AssetBundle 사용 시 주의점 (0) | 2021.07.21 |
ScriptableObject AssetBundle 참조 및 불러오기 실패 문제 (0) | 2021.03.17 |