[x] panel 생성
[x] input field & 버튼 만들고 적절한 안내 text 넣기
[x] input field 글자수에 따른 button 활/비활성화 구현
[x] input field 소리 & 버튼 클릭 소리
→ 무료 에셋으로 임시로 넣어둠
[x] 이름 입력 panel ui 순서 설정
[ ] 이름 저장
[x] 이름 입력 후 intro scene으로 전환 때리기
TMP_InputField로 플레이어의 닉네임을 입력받고, 바로 옆 Button UI를 통해 입력 받은 닉네임을 넘겨처리하고자함. 문제는 inputfield에서 한글로 입력하고 바로 Button을 마우스로 클릭하게되면 마지막 글자가 제대로 넘어가지 않고 버퍼에 남아있게 됨. 그래서 다른 inputfield나 string 입력창을 누르게 되면 버퍼에 남아있는 글자가 잘못 전달되는 오류가 발생함
Unity의 InputField(또는 TMP_InputField)에서 한글 입력 관련 문제가 발생하는 원인은 한글 입력기가 사용 중일 때 입력 완료 처리와 Unity의 이벤트 처리 순서가 맞지 않아서입니다. 특히, 입력 중인 한글 조합 상태에서 마우스 클릭 이벤트가 발생하거나 다른 입력창으로 전환되면 아래와 같은 문제가 발생할 수 있습니다:
입력 완료 타이밍 문제
한글은 조합 중인 글자가 완성된 후에야 최종적으로 입력됩니다. 그러나 Unity는 조합이 완료되기 전에 onEndEdit 또는 onValueChanged 이벤트를 호출하여 입력 완료 처리를 시도합니다. 이로 인해 마지막 글자가 제대로 처리되지 않을 수 있습니다.
버퍼 문제
입력기(IMF, Input Method Framework)와 Unity 간의 동기화가 완료되지 않아 이전에 입력하던 글자가 버퍼에 남아 있을 수 있습니다.
예를 들어, 한글 조합이 끝나지 않은 상태에서 입력창을 전환하면 버퍼에 남아 있던 글자가 다른 InputField에 잘못 전달될 수 있습니다.
문제를 해결하기 위해 다음과 같은 방법을 적용할 수 있습니다:
onSubmit이나 onEndEdit 이벤트 호출 순서 확인onSubmit 이벤트는 Enter 키를 누르거나 입력 창에서 포커스가 벗어날 때 호출됩니다.using UnityEngine;
using TMPro;
using System.Collections;
public class KoreanInputHandler : MonoBehaviour
{
public TMP_InputField inputField;
public GameObject submitButton;
private void Start()
{
inputField.onValueChanged.AddListener(OnInputValueChanged);
inputField.onEndEdit.AddListener(OnInputEndEdit);
}
private void OnDestroy()
{
inputField.onValueChanged.RemoveListener(OnInputValueChanged);
inputField.onEndEdit.RemoveListener(OnInputEndEdit);
}
private void OnInputValueChanged(string text)
{
// 입력된 텍스트가 비어 있지 않을 때 버튼 활성화
submitButton.SetActive(!string.IsNullOrEmpty(text));
}
private void OnInputEndEdit(string text)
{
// 한글 조합 완료를 기다리기 위해 Coroutine 실행
StartCoroutine(HandleEndEditAfterDelay());
}
private IEnumerator HandleEndEditAfterDelay()
{
yield return null; // 다음 프레임까지 기다림 (한글 조합 완료)
Debug.Log($"최종 입력된 텍스트: {inputField.text}");
}
}