한동안 엄청 고생했던 것을 바탕으로 작성한다.
Unity 상에서 Button에 이벤트를 할당하는 방법은 2가지가 있다.
직접 Inspector 창에서 매핑하기
스크립트 상에서 할당하기
using UnityEngine.UI;
GoPCBtn.onClick.AddListener(func);
보통은 매핑하기 힘들거나 코드를 한눈에 파악하기 힘들 때 사용하는 방법이 스크립트 상에서 할당하는 것이다.
가끔 Button 에 이벤트를 추가할 때 기존에 추가한 이벤트를 지우고 싶은 순간이 찾아오게 된다.
예를 들어 활성화될 때마다 리스너를 추가한다던가, 한 Popup 안에서 다양한 기능들을 스위칭해서 사용하는 경우
이때 사용하는 것이 바로 RemoveListener 혹은 RemoveAllListener이다.
알아둬야 할 점이 RemoveListener와 RemoveAllListener는 Editor에서 매핑시켜준 이벤트(메서드) 들은 제거되지 않고
스크립트 상에서 추가한 리스너들만 제거한다는 것이다.
Unity 레퍼런스에서도 읽어보면
런타임 중에 추가된 "비 영구" 리스너만 제거합니다. 영구 리스너들은 제거할 수 없습니다.
비 영구 리스너?
스크립트에 의해 추가 된 리스너들을 말한다.
영구 리스너
Editor 상에 Inspector에서 매핑시킨 리스너들은 Inspector 상에서만 제거할 수 있다.
결론
내가 스크립트에서 리스너를 할당했으면 RemoveListener 나 RemoveAllListener를 이용하고,
Inspector 창에서 리스너를 할당했으면 Inspector 창에서 지워야 한다.
'Unity' 카테고리의 다른 글
SOLID, 객체지향 원칙 (0) | 2021.08.15 |
---|---|
[Unity] ios unitywebrequest.get (0) | 2021.06.28 |
[Unity] 소수점 처리 (0) | 2021.04.14 |
[Unity] text component (0) | 2021.04.03 |
[Unity] RectTransform width height 변경하는 방법 (0) | 2021.04.02 |