TIL

유니티 델리게이트 이벤트 초기화 하기

박민혁_kog 2023. 11. 14. 21:23

원인

 

현재  스킬 이벤트(우클릭)에 스킬 1 이 걸려있음
게임 도중 스킬2로 바꾸는 경우 스킬1을 이벤트에서 해제 하는 함수를 만들어두면 
쉽게 1을 제거하고 2를 넣을수 있음 

그러나 스킬 2상태에서 스킬 3으로 바꾸려 할때 스킬2의 구독을 빼는 방법을  모르겠음

델리게이트자체를 초기화 할수 있는지?
없다면 
enum값으로 enum값 상태에 따라 대응하려 하는데 괜찮을지?
enum skill1
== 기본상태 =>

 

 

결론

델리게이트를 초기화 할수 있다!!!!

 

아래와 같이 정의된 이벤트가 있다고 가정하고..

 

class MyClass{ public event EventHandler AfterEndTransaction; }

 

위 이벤트에 연결된 모든 함수를 제거하려면 그냥.. NULL을 대입하면 된다!

AfterEndTransaction = null;

그런데, 함수 외부에서 null을 대입하려면 아래와 같은 에러가 뜹니다.

 

error CS0079: 'Element.AfterEndTransaction' 이벤트는 += 또는 -=의 왼쪽에만 올 수 있습니다.

클래스 외부에서는 +=과 -= 만 사용할 수 있기 때문인데, 클래스에 함수를 만들어서 함수 내에서 null을 대입하면 해결 됩니다.

class MyClass{
 
public event EventHandler AfterEndTransaction;
 
public void ClearEventHanders() { AfterEndTransaction = null; }
 
}
 

이렇게 만들어서 외부에서 ClearEventHanders를 호출하면 됩니다.