[Unity] UnityEvent

Learning 

When: 1학년 9월 17일 (14일 치, 사유 : 동아리 팀 프로젝트)

 

How:

학교 수업 시간에 일반적인 델리게이트 이벤트가 아닌 UnityEvent라는 클래스로 함수를 호출하는 방법을 배우게 되어서 따로 공부하게 되었습니다.

 

Understanding:

  • 설명 : UnityEvent는 Unity에서 델리게이트를 직렬화 가능한 버전으로 만든 클래스 입니다. 기본적으로 델리게이트의 개량형인 클래스이기 때문에 함수를 구독하고 Invoke 시키는 등 활용 방법, 사용 방법이 거의 같기 때문에 차이점 위주로 설명하겠습니다.
  • 차이점 
    • 직렬화 : 일반적인 델리게이트는 직렬화가 되지 않는데, UnityEvent에서는 List<PersistentCall> 타입의 리스트로 메서드를 담아서 순서대로 호출하는 방식으로 event 시스템을 구현하기 때문에 직렬화할 수 있습니다. 즉 인스펙터에서 메서드를 추가하거나 삭제하는 등 관리도 할 수 있습니다.
    • 구독 방식 : UnityEvent는 리스트로 메서드를 관리하기 때문에 +=으로 구독하지 않고 AddListener() 메서드를 통하여 리스트에 담아 구독할 수 있습니다.
    • 활용 : UnityEvent는 인스펙터에서도 쉽게 구독할 수 있기 때문에 협업할 때 코드를 굳이 바꾸지 않아도 구독할 수 있다는 점에서 좋지만, 리스트를 순회하기 때문에 성능 면에서는 조금 떨어집니다.
  • 주요 메서드 
메서드 이름 활용
AddListener 메서드를 추가할 때 사용합니다.
RemoveListener 특정 메서드를 제거할 때 사용합니다.
Invoke 이벤트를 실행할 때 사용합니다.
RemoveAllListeners 모든 메서드를 제거할 때 사용합니다.

 

Result: UnityEvent는 비주얼 스튜디오에서 어떤 메서드가 참조되는지 알 수 없다는 단점이 있기는 하지만, 직관적이고 직렬화할 수 있다는 장점이 있기 때문에 UI 버튼 같은 간단한 이벤트에 사용하면 좋습니다.

'UnityEngine' 카테고리의 다른 글

[Unity] FSM_원리 (State)  (0) 2025.09.19
[Unity] FSM_개념  (0) 2025.09.18
[Unity] UI 선택 판정 버그  (0) 2025.09.12
[Unity] 2D에서 Light를 다루는 기본적인 방법  (0) 2025.09.09
[Unity] 글자에 맞게 UI 크기 조절하기  (0) 2025.09.05