게임 프로그래밍/Unity
버튼의 onClick. 스크립트와 인스펙터에 대하여
스게
2021. 11. 12. 11:14
유니티의 수많은 기능중 button이 있다.
그리고 여기서 button을 눌렀을 때 실행되는 함수를 리스너에 담아놓는것이 onClick 이다.
onClick의 리스너는 인스펙터로 직접 추가할 수도, 스크립트로 넣을 수도 있다.

이런식으로 하거나
btn.onClick.AddListener(() => method());
이렇게 AddListener로 추가할 수 있다.
그리고 onClick 리스너를 비우는건 RemoveAllListeners 메서드를 이용한다.
btn.onClick.RemoveAllListeners();
그런데 오늘 문제가 생겼다.
계획으로는 인스펙터로 리스너에 추가한 다음 스크립트에서 비울려고 했는데
...안된다.
RemoveAllListeners 메서드는 분명히 실행됬는데 인스펙터는

리스너가 그대로 남아있다.
알아보니 RemoveAllListeners는 비지속적인 리스너만 지운다고 한다. 스크립트로 추가된 메서드만 지운다는 소리다.
그래서 인스펙터로 리스너에 추가한 경우 SetPersistentListenerState()를 사용해야 한다.
//0은 index 번호
btn.onClick.SetPersistentListenerState(0, UnityEngine.Events.UnityEventCallState.Off);
이 경우 삭제가 되는게 아니라 해당 리스너를 끄기에 그에 따른 방법이 필요하다.