유니티이벤트와 유니티액션을 이해하기에 앞서 Delegate(대리인)에 대해 이해해야 함.
Delegate : 프로그래밍에서는 메서드를 참조하고 있다가 대신 호출해주는 변수를 의미
> 기존에는 A클래스 안의 F1메서드를 B클래스에서 사용하려면 B클래스가 A클래스를 소유하고 있었어야 했지만 Delegate를 활용하면 A클래스가 B클래스의 델리게이트에 함수를 등록해두면 된다.
A클래스를 소유할 필요없이 B클래스가 메서드가 등록된 Delegate를 실행해주면 A클래스의 F1 메서드가 실행된다.
1. 유니티 이벤트
: 이벤트와 델리게이트를 사용하기 편하도록 유니티측에서 랩핑 해 놓은 기능
1) 이벤트 활용법
- 이벤트를 발생시키는 쪽(Publisher)과 이벤트에 반응하는 쪽(Subscriber)으로 구성되어 있으며, publisher와 subscriber는 서로에 대해 모른다.
- Publisher는 EventHandler/Action를 선언하고 Subscriber들은 EventHandler/Action에 +=, -= 을 통하여 이벤트에 반응해서 실행할 함수들을 등록/해제 한다.
- Publisher가 특정 조건에 EventHandler/Action?.Invoke()를 통하여 이벤트에 등록된 함수들을 실행할 수 있게 신호를 보낸다.
(?는 null이 아니어야 실행되도록 하는기능이다)
2) 유니티 이벤트 활용법
- 유니티 이벤트의 경우 using UnityEngeine.Events; 네임스페이스를 등록하여 사용 가능하다.
- 스크립트 상에서 AddListener(메서드)를 통하여 추가할 수 있다.
- public UnityEvent On~을 통하여 인스펙터창에서 수동으로 구독자 및 메서드를 추가 가능하다
(UI의 버튼 인스펙터의 OnClick과 같은 느낌)
- 마찬가지로 On~?.Invoke();를 통해 등록된 메서드들을 실행할 수 있다.
3) event Action 과 Action의 차이점
- event Action의 경우 외부에서 직접 호출하지(invoke) 못하게 보호하는 역할. 외부에서는 +=/-= 만 가능.
- Action은 외부에서 호출 가능
2. 유니티액션 (UnityAction)
: 기본적으로 유니티이벤트와 같은 역할을 한다.
1) 유니티이벤트와의 차이점
- public으로 사용해도 인스펙터상에 노출되지 않는다.(유니티이벤트처럼 수동으로 메서드 추가가 불가능하다)
- 동적으로 코드 상에서 메서드를 추가하거나 제거할 때 주로 사용
** 틀린 정보가 있다면 댓글로 알려주세요 **
'유니티 공부' 카테고리의 다른 글
클릭, 터치 인터페이스 (IPointerDownHandler, IPointerUpHandler, IPointerClickHandler (1) | 2025.03.06 |
---|---|
코루틴 (Coroutine) (2) | 2024.11.13 |