SMALL
채팅 관련 구현을 하는 중 텍스트 입력을 후 엔터를 눌러 onSubmit 이벤트를 받아 RPC로 메시지 전달하도록 구현하였다.
private void SendChat(string message)
{
// null이거나 비어있는 텍스트는 리턴
if (string.IsNullOrEmpty(message)) return;
SendMessage(message);
// 입력 필드 초기화
inputField.text = string.Empty;
}
그런데 UX 관점으로 채팅 메시지를 전달하면 끝나는 것이 아니라
다음 채팅 내용을 바로 입력할 수 있어야 했지만 InputField는 다음 입력을 받지 못하였다.
따라서 입력 후 즉시 InputField를 Select해주는 코드를 넣었다.
private void SendChat(string message)
{
// null이거나 비어있는 텍스트는 리턴
if (string.IsNullOrEmpty(message)) return;
SendMessage(message);
// 입력 필드 초기화
inputField.text = string.Empty;
// 입력 필드에 다시 포커스 주기
inputField.ActivateInputField();
inputField.Select();
}
이렇게 하면 당연히 바로 채팅 입력이 될 줄 알았는데, 신기한건 에디터에서는 되지만 빌드에서는 엔터를 한 번 더 입력해야 텍스트 입력이 가능해진다.
ChatGPT에게 물어보니 힌트를 주었다.
이 문제는 TMP_InputField에서 엔터를 누른 후
입력 필드가 제대로 다시 활성화되지 않아서 발생하는 현상입니다.
// 비동기 작업을 위해 async 추가
private async void SendChat(string message)
{
// null이거나 비어있는 텍스트는 리턴
if (string.IsNullOrEmpty(message)) return;
SendMessage(message);
// 입력 필드 초기화
inputField.text = string.Empty;
// 0.02초 지연 후 InputField 초기화
await Task.Delay(20);
// 입력 필드에 다시 포커스 주기
inputField.ActivateInputField();
inputField.Select();
}
포커스를 즉시 주는 것이 아니라 약간의 딜레이 후에 포커싱을 하였더니 제대로 작동한다.
반응형
'게임 개발 공부 > Unity' 카테고리의 다른 글
앱 재시작(안드로이드 AOS) (0) | 2025.06.08 |
---|---|
빌드 리포트 인스펙터(Build Report Inspector) (1) | 2024.09.07 |
LayerMask를 이용한 Layer 비교(feat.충돌 처리) (0) | 2024.05.09 |
Unity Script에서 HEX(Hexadecimal) 값으로 Color 변환하는 법 (1) | 2024.01.28 |
유니티 드로우콜 (0) | 2022.07.08 |