본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 05. 22. 23:02

Unity의 Dropdown 표시가 따라오지 않을 때의 원인과 대처법

요약

Unity Localization 사용 시 Dropdown UI의 표시 값이 변경된 로케일을 즉시 반영하지 못하는 문제를 다룹니다. SelectedLocaleChanged 이벤트를 구독하고 RefreshShownValue()를 호출하여 상태와 UI를 동기화하는 해결 방법을 제시합니다.

핵심 포인트

  • Dropdown.value 변경만으로는 UI 라벨이 자동 갱신되지 않을 수 있음
  • SelectedLocaleChanged 이벤트를 구독하여 로케일 변경을 감지해야 함
  • RefreshShownValue() 호출을 통해 Dropdown의 외관을 강제로 업데이트함
  • AI 활용 시 증상, 기대 동작, 확인 함수를 구체적으로 전달하는 것이 중요함

결론

Unity의 Dropdown은 값만 변경해서는 표시가 따라오지 않는 경우가 있다. 언어 전환 시에는 SelectedLocaleChanged를 구독하고, SetSelectedLocale()RefreshShownValue()를 모두 호출하여 로케일(Locale) 상태와 UI 표시를 별도로 동기화해야 했다.

AI에게 의뢰할 때도 "값을 업데이트하고 싶다"라는 한마디로는 부족하며, "닫았을 때의 표시까지 업데이트하고 싶다", "Locale 상태와 UI를 동기화하고 싶다"까지 전달하면 해결책을 구체화하기 쉽다.

하고 싶은 것

Title 화면의 LangPanel에서 ja / en / zh-CN / zh-T / ko 언어 전환을 구현하고 싶었다.

선택한 언어가 LocalizationSettings.SelectedLocale에 반영되고, 닫은 후의 Dropdown 표시에도 동일한 값이 보이도록 만드는 것이 목적이었다.

문제

언어를 선택해도 Dropdown을 닫은 후에 표시 문자가 업데이트되지 않는 경우가 있었다.

LocalizationSettings.SelectedLocale의 전환 자체는 이루어지고 있어도, UI 측의 표시가 옛날 상태 그대로 남아 있어 Locale 상태와 외관이 어긋나 있었다.

AI에게 그대로 상담할 때도 Dropdown.value를 바꾸고 있는지 여부뿐만 아니라, "선택된 표시가 바뀌지 않는다", "Locale은 바뀌어 있다", "화면이 재그려지지 않는다"라는 3가지 점을 나누어 전달하지 않으면 원인 파악이 얕아지기 쉽다.

원인

Dropdown의 value를 업데이트하는 것만으로는 표시 중인 라벨(Label)이 자동으로 재그려지지 않는 케이스가 있었다.

게다가 Locale의 변경 통지와 Dropdown의 표시 업데이트가 별개의 흐름으로 되어 있었기 때문에, 상태 변경만으로는 화면이 따라오지 않았다.

AI에 대한 지시도 마찬가지로, Dropdown의 외관 업데이트와 LocalizationSettings의 상태 업데이트를 동일한 문제로 던지기보다, 별개의 레이어(Layer)를 가진 동기화 문제로 전달하는 편이 수정안이 흔들리지 않는다.

해결 방법

TitleSceneController에서 SelectedLocaleChanged를 구독하여, Locale 변경이 일어나면 UI를 업데이트하도록 했다.

함께 SetSelectedLocale()로 설정을 반영하고, 마지막에 RefreshShownValue()를 호출하여 Dropdown의 표시를 업데이트했다.

이로써 언어 전환 후의 내부 상태와 외관이 일치하게 되었다.

AI에게 지시한다면 다음과 같이 "증상", "기대 동작", "확인하고 싶은 함수"를 세트로 전달하는 것이 유효했다.

LocalizationSettings.SelectedLocale은 바뀌고 있다 - 하지만 Dropdown의 닫힌 표시가 업데이트되지 않는다

SelectedLocaleChanged를 포착하여 RefreshShownValue()가 필요한지 확인해 달라 - 필요하다면 TitleSceneController 측의 동기화 방식까지 제안해 달라

순서

  • LangPanel의 Dropdown에 ja / en / zh-CN / zh-T / ko를 설정한다.
  • 선택 시 LocalizationSettings.SelectedLocale을 업데이트한다.
  • SelectedLocaleChanged를 구독하여, Locale 변경 시 UI 측도 재동기화한다.
  • RefreshShownValue()를 호출하여, 닫힌 상태의 Dropdown 표시를 업데이트한다.
  • AI에게 상담할 경우에는 Dropdown.value뿐만 아니라 RefreshShownValue()SelectedLocaleChanged까지 포함하여 설명한다.

빠지기 쉬운 함정 (ハマりポイント)

Dropdown.value를 업데이트한 것만으로 "표시도 바뀔 것이다"라고 단정 지으면, 상태와 외관의 어긋남을 알아차리기 어렵다.

Unity에서는 데이터 업데이트와 그리기(Rendering) 업데이트가 별개의 레이어에서 동작하는 경우가 있으므로, 변경 후의 재그리기까지 포함하여 설계할 필요가 있다.

AI를 사용할 때도 보이는 현상만을 짧게 던지기보다, "상태", "표시", "업데이트 타이밍"을 나누어 전달하는 편이 원인에 가까운 답변을 얻기 쉽다.

보충

이러한 대응 방식은 언어 전환뿐만 아니라 "상태는 변했는데 UI가 예전 그대로인" 문제 전반에 응용할 수 있다.

특히 설정 화면이나 타이틀 화면처럼 입력 결과를 즉시 보여주고 싶은 화면에서는, 상태 변경의 통지(Notification)와 표시 업데이트(Display Update)를 나누어 생각하면 정리하기 쉽다.

AI에 대한 지시에서도 마찬가지로, 구현을 통째로 맡기기보다 "어떤 상태를, 어느 타이밍에, 어디까지 반영하고 싶은지"를 먼저 작성하면 수정의 정밀도가 높아진다.

대상 환경

  • Windows 11
  • Unity 6.3 LTS
  • Visual Studio Code 1.119
  • OpenAI Codex v0.130.0
  • model: gpt-5.5 xhigh / gpt-5.4-mini medium

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0