delegate void callEventHandler(int a);
delegate는 함수 형태 정의다.
event callEventHandler CallEvents = null;
event는 함수 배열이다.
CallEvents += (int a) => { Debug.Log(a); };
void Func(int a)
{
Debug.Log(a + 1);
}
CallEvents += Func;
선언해줬던 event(CallEvents)에 함수를 +로 추가해주기만 하면
CallEvents(5);
// 결과 : 5, 6
event 이름 뒤에 괄호를 붙여주는 것만으로도 넣어뒀던 모든 함수 호출이 가능하다.
참고로 초기화는 null로 만들어주면 된다.
전체 코드
delegate void callEventHandler(int a);
event callEventHandler CallEvents = null;
void Func(int a)
{
Debug.Log(a + 1);
}
void Start()
{
CallEvents += (int a) => { Debug.Log(a); };
CallEvents += Func;
CallEvents(5);
}
활용 방식
- GetComponentsInChildren을 통해 하는 일이 함수 호출밖에 없을 때
- 데이터가 바뀌어 UI를 새로고침할 때
- 콜백 함수 대체
주의사항
- dontdestroyonload 오브젝트 내에서 사용 시, 맵이 바뀌었는데 이전 맵의 함수를 참조하고 있으면 에러가 난다.
(당연한 소리긴한데 한 번 이거에 데인 적이 있어서 적어둠)