부트캠프/Unity [ 스파르타 ]

[스파르타 ][TIL] 유니티 스파르타 7기 50일차 - 인벤토리 UI 초기화 시 AddListener 중복 등록 이슈

맏난거 2025. 4. 21. 22:40

🧩 문제 요약

  • 인벤토리 UI를 초기화하는 로직이 2번 호출되었음
  • 그 과정에서 Button.onClick.AddListener()도 두 번 호출
  • 결과적으로 버튼에 이벤트 리스너가 중복 등록되어, 버튼 클릭 시 메서드가 2번 실행
  • 특히 일괄 선택/해제 기능에서 비정상 동작(두 번 선택되거나 해제되는 현상)이 발생함

✅ 해결 방법

  • AddListener() 전에 기존 리스너 제거 필요
    → button.onClick.RemoveAllListeners() 또는 특정 리스너 제거
button.onClick.RemoveAllListeners();
button.onClick.AddListener(OnClick);
  • UI 초기화가 중복 호출되지 않도록 UI 초기화 위치를 명확하게 제어하거나 중복 호출 방지 조건 추가

🤔 느낀점

  • 이벤트 등록은 한 번만 실행되어야 함을 명심
  • UI 초기화 로직이 언제, 어디서 호출되는지 추적하는 습관이 중요
  • 특히 Unity에서는 버튼 리스너 중복 등록으로 인해 디버깅이 어려운 UI 버그가 발생할 수 있으니 주의해야 함