본문 바로가기

Unity

[Unity] 델리게이트가 뭐야?

728x90

문제 

 플레이어와 적 200명이 있다. 플레이어는 적의 움직임을 멈출 수 있는 아이템 A를 먹었을 때 적을 어떠한 방식으로 멈추게 할 것인가?

 

해결 방법과 델리게이트 설명

1. 기본적으로 생각할 수 있는 부분은 플레이어가 아이템 A를 먹은 직후에 200명의 적 오브젝트에 들어가 속도와 관련된 변수를 0으로 초기화해주는 것이 있을 것이다.

 

 직관적인 방법이지만 이러한 방식을 사용하면 아이템 A를 먹을 때마다 200명의 적을 모두 조사해줘야 하고, 이것을 적들이 아니라 적이 발사하는 투사체로 변하게 된다면 200개가 아니라 2000개도 될 수 있는 것이다. 코드가 비효율적이고, 재활용 가능하지도 않게 될 것이다.

 

이때 사용가능한 것이 델리게이트이다.

 

델리게이트란?

 네이버 사전에서는 이런 뜻을 가지고 있다. "(집단의 의사를 대표하는) 대표(자)" 델리게이트는 델리게이트 안에 저장된 함수의 대표자로써 함수를 호출해준다.

위의 그림처럼 델리게이트 변수에 함수들을 저장할 수 있다. 함수를 저장할 수 있는 리스트와 비슷하다고 할 수 있다.

이렇게 저장된 델리게이트를 실행시켜주면 차례로 함수들을 실행시켜준다.

 

 

어떻게 하면 위의 방법을 델리게이트를 사용함으로써 해결할 수 있을까?

 

2. 적 스크립트에 델리게이트 변수를 선언해주고 속도를 0으로 만들어주는 함수를 만들어서 저장해준다. 그리고 플레이어가 아이템 A를 먹었을 때 델리게이트 변수를 실행시켜주기만 한다면 모든 적 스크립트에 저장되어 있는 델리게이트 변수 안에 있는 속도를 0으로 만들어주는 함수가 실행되는 방식으로 해결할 수 있을 것이다.

 

아래 링크는 델리게이트를 사용하여 게임 승리 UI와 게임 종료 UI를 실행시켜주는 방식에 대해 설명되어있다. 

 

https://hangjastar.tistory.com/50

 

[도둑과 경호원] Unity: Sysyem.Action을 이용한 이벤트

System.Acition(delegate)을 이용하여 이벤트를 발생시키는 방법에 대해서 알아볼 것이다. 이 방법은 이번에 공부하면서 알게 된 방법이다. 이 방법의 좋은 점은 단지 System.Action에 저장되어있는 함수를

hangjastar.tistory.com

델리게이트는 유니티에서 메모리를 절약할 수 있는 방법 중 하나이다. 개념에 대해 정확히 알고 정확한 곳에 쓸 수 있게 공부하는 것이 프로그래밍 실력 향상에 있어서 더 좋을 것 같다.

728x90