Unity

[Unity] RemoveListener, RemoveAllListener

Mirab 2021. 4. 15. 19:33

한동안 엄청 고생했던 것을 바탕으로 작성한다.

 

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