본문 바로가기
유니티

Unity WebGLInput 입력 누적 문제 해결(InputField)

by 유니티세상 2026. 1. 22.
반응형

https://github.com/kou-yeung/WebGLInput

 

GitHub - kou-yeung/WebGLInput: IME for Unity WebGL

IME for Unity WebGL. Contribute to kou-yeung/WebGLInput development by creating an account on GitHub.

github.com

 

문제 상황

Unity 입력은 비워졌지만 HTML input이 남아 있어 텍스트가 누적되는 문제가 발생했다

 

예를 들어 안녕 이라는 채팅을 친 후 보낸다

다시 채팅에서 1을 칠려고 한글자를 입력하면 이전 글들이 누적되어서 1안녕  이런식으로 나왔다

로컬에서는 문제가 생기지 않아 WebGLInput 이 문제가 되었다는것을 알게됨

 

WebGLInput의 구조적 특성

 

WebGLInput은 WebGL 환경에서 한글 IME 문제를 해결하기 위해

WebGL에서는 HTML input이 원본을 사용한다

  • Unity의 InputField / TMP_InputField를 직접 입력 소스로 쓰지 않는다고 한다
  • 대신 브라우저 HTML <input>/<textarea>를 생성
  • 입력 흐름은 다음과 같다고함

사용자 키 입력
→ HTML input.value 변경
→ JS → C# 콜백(OnValueChange)
→ Unity InputField.text = value

 

Unity TMP_InputField.text는 코드상 비워줬지만 HTML input.value는 그대로 남아 있어서 생긴 문제였다

 

예시)

  1. HTML input.value = "안녕" (이전 값)
  2. 사용자가 "1" 입력
  3. HTML input.value → "안녕1" 또는 "1안녕"
  4. OnValueChange() 콜백 호출
  5. Unity가 다시 "안녕1"을 받아 덮어씀

결과: “비웠는데 이전 글이 다시 살아나는 것처럼 보이는 현상”

 

 

해결 방식 (SyncText)

chatMessage.text = "";

if (webGLInput != null)
{
    webGLInput.SyncText(0);
}

 

SyncText()는 내부적으로

  • Unity의 input.text 값을
  • HTML input.value에 강제로 덮어씀
  • 커서 위치까지 함께 동기화 시켜줌

 

 

아래 pr에서도 같은 문제였던것같다

https://github.com/kou-yeung/WebGLInput/pull/184

 

Add Clear and ClearAll methods to WebGLInput by dannykoh · Pull Request #184 · kou-yeung/WebGLInput

Summary Implemented two new methods for input field management. Clear() — Resets the text content of a single input field on both Unity and HTML sides. ClearAll() — Clears all input fields simulta...

github.com

 

 

SyncText 방식이 적합한 경우

  • 채팅처럼 특정 입력 하나만 즉시 비워야 할 때
  • 최소 수정으로 문제를 해결하고 싶을 때
  • 이미 전송 로직이 잘 짜여 있을 때

Clear / ClearAll이 더 적합한 경우

  • UI 전환, 채팅창 재오픈, 폼 리셋 같은 명확한 “초기 상태”가 필요할 때
  • 여러 입력 필드를 한 번에 리셋해야 할 때
반응형