게임 개발 공부/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();
}


포커스를 즉시 주는 것이 아니라 약간의 딜레이 후에 포커싱을 하였더니 제대로 작동한다.

반응형