브라우저에서 한글 채팅이 물음표가 될 때

입력한 한글과 도착한 문장이 달랐습니다
LAST37N의 Unity Web 채팅에서 한국어 문장을 입력한 뒤 다른 접속자의 수신 내용을 확인했더니 물음표만 전달됐습니다. 이름도 입력한 한글을 유지해야 했습니다. 입력창의 외형을 다듬는 문제가 아니라, 브라우저 입력이 게임과 서버를 거쳐 상대에게 도착하는 경로를 확인해야 했습니다.
재현 환경은 Unity 6000.0.83f1 WebGL과 Windows의 Edge 156.0.4314.50이었습니다. 기존 IMGUI 채팅에서 실제 입력 실패를 남기고, 해당 Unity 버전의 공식 입력 문서와 대조했습니다. 다른 버전의 지원 범위를 현재 프로젝트에도 그대로 적용하지 않았습니다.

수정 후 실제 두 접속에서 확인한 한국어 채팅 화면입니다.
브라우저 입력과 게임 전달을 연결했습니다
기본 입력 경로가 한국어 조합을 보존하지 못해 브라우저의 HTML 입력 폼을 연결했습니다. 이름과 채팅이 같은 경로를 사용하고, Unity에는 UTF-8 SendMessage로 전달하도록 했습니다. 입력 방식이 나뉘어 이름은 되지만 채팅은 손상되는 결과가 생기지 않도록 두 대상을 함께 검사했습니다.
아래는 원문에 기록된 입력 흐름과 확인 지점을 설명한 도표입니다. 실제 함수 전체나 네트워크 패킷 구현을 옮긴 코드는 아닙니다.
flowchart LR
A["브라우저 HTML 입력"] --> B["조합 상태 확인"]
B --> C["전송 확정"]
C --> D["UTF-8로 Unity 전달"]
D --> E["서버와 다른 플레이어 수신 확인"]
조합 Enter와 전송 Enter를 나눴습니다
한글 입력 중 Enter는 글자 조합을 끝내는 동작일 수 있습니다. 이를 곧바로 채팅 전송으로 처리하지 않도록 조합 중 Enter 전송을 막았습니다. 문자가 보존되는 것과 사용자가 의도한 순간에 전송되는 것은 다른 문제이므로 함께 다뤘습니다.
키보드 포커스도 연결했습니다. HTML 입력을 사용할 때 WebGLInput.captureAllKeyboardInput을 전환하고 이후 복원하도록 했습니다. 브라우저 입력과 게임의 키 처리를 동시에 고려해야 입력 경로를 바꾼 뒤 기존 게임 조작을 유지할 수 있습니다. 원문에서 확인한 것은 이 전환·복원 구현과 실제 입력 검사이며 모든 키보드 조합의 검증까지 뜻하지는 않습니다.
양방향 전달과 표시 수명까지 확인했습니다
수정 뒤 실제 두 Edge에서 한국어를 왕복 전송하고 이름표와 말풍선을 확인했습니다. 새 이름과 조합 Enter도 검사했으며 말풍선이 6초 후 만료되는지 확인했습니다. 한쪽 화면에만 한글이 나타나는 결과가 아니라 상대 접속에서 같은 대화가 보이는지까지 대조한 것입니다.
서버에서는 발신자 위조와 중복, 거리와 월드 범위 검사를 확인했습니다. 글자가 제대로 전달되는 것과 메시지를 보낼 수 있는 조건이 맞는 것을 구분했습니다. 기본 로컬 서버에 적용된 실제 입력도 다시 확인했고 엔진 오류는 없었습니다. 최초 물음표 전송 실패 자료는 지우지 않고 이후 결과와 비교할 근거로 보존했습니다.
확인한 환경의 범위를 남깁니다
이번 수정은 해당 Unity 버전과 Windows·Edge에서 재현한 이름·채팅 손실에 대한 검증입니다. 모든 OS의 IME, 입력 장비, 실제 운영 환경까지 확인한 것은 아닙니다. 다른 환경으로 넓힐 때에도 입력창의 문자만 보지 않고 조합 확정, 게임 전달, 상대 수신을 나눠 확인해야 합니다. 이번 작업에서는 그 연결을 실제 두 접속의 결과로 확인했습니다.
미로


댓글
이 글에 대한 생각을 남겨 주세요.