함수를 변수처럼 사용할 수 있다.
SpawnPlayer()를 예로 들어보자.
플레이어를 맵에 생성하는 함수 SpawnPlayer()가 있을 때, 방 A, B, BossRoom, RandomPlace처럼 방에 따라 생성하는 함수가 다르다고 가정해보자.
이때, 각자 함수를 만드는 것보다 델리게이트를 통해 함수를 변수처럼 사용할 수 있다.
delegate 반환형 델리게이트이름 (매개변수);
delegate void SpawnDelegateFunc(); // 1. 델리게이트 선언
void Start()
{
SpawnDelegateFunc spawnAction; // 2. 델리게이트 변수 만들기
spawnAction = SpawnPlayer_ARoom; // 4. 델리게이트 변수에 함수 저장
InitStageData();
SpawnPlayer(); // 5. 델리게이트 실행!
SpawnMonster();
}
// 사용할 함수 만들기
void SpawnPlayer_ARoom(){...} // 3. 위의 델리게이트를 선언한 것과 같은 반환형, 매개변수를 사용해야 한다.
void SpawnPlayer_BRoom(){...}
...
델리게이트에 여러 개의 함수를 넣고 싶을 때는
spawnAction += SpawnPlayer_ARoom;
과 같이 사용할 수 있다.
ex) 방이 수백개씩 된다면? →
팝업 창이 있을 경우, 팝업 창의 내용별로 함수를 따로 만들어야한다.
void PopupConfirm_QuitGame()
{
// 팝업 창별 기능
}
void PopupConfirm_ChangeCharacter()
{
}
...
필요한 기능을 별도로 구현하지 않고 전달받은 기능만 실행하도록. 여러 상황에 대응할 수 있도록 한다.