게임 개발 공부/Unity
채팅 구현 관련(연속 채팅)
CalebHong
2025. 6. 12. 17:30
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();
}
포커스를 즉시 주는 것이 아니라 약간의 딜레이 후에 포커싱을 하였더니 제대로 작동한다.
반응형