event 개념은 이전 C#에서 delegate를 학습하면서 다루었던 적이 있다.
지금 바로 이 순간을 위한 빌드업이었다고 해도 과언이 아니다.
특정 상황이 발생했을 때 다른 시스템에 알려야하는 순간이 존재하고, 이런 구조를 위해 콜백(Callback), 델리게이트(Delegate), 이벤트(Event) 가 존재한다.
그리고 Unity에는 UnityEvent 라는 것이 존재한다.
델리게이트 (Delegate)
메서드를 변수처럼 저장하고 호출할 수 있는 타입으로, 메서드의 참조(주소)를 담을 수 있는 콜백 구조다.
public delegate void OnPlayerDie(); // 메서드 시그니처 정의
public class Player
{
public OnPlayerDie onPlayerDie; // 델리게이트 변수 선언
public void Die()
{
Debug.Log("플레이어 사망");
onPlayerDie?.Invoke(); // 연결된 모든 함수 호출
}
}
다음처럼 여러 함수를 통시에 연결할 수도 있다.
void Start()
{
Player player = new Player();
player.onPlayerDie += ShowGameOverUI;
player.onPlayerDie += PlayDeathSound;
}
이벤트 (event)
이벤트는 델리게이트를 한 단계 더 캡슐화한 형태다.
델리게이트는 외부에서 마음대로 Invoke나 =할당이 가능했는데 event는 이를 방지하여 외부에서 직접 실행할 수 없는 델리게이트를 만든다.
using System;
using UnityEngine;
public class Player
{
public event Action OnPlayerDie; // 델리게이트 대신 event 사용
public void Die()
{
Debug.Log("플레이어 사망");
OnPlayerDie?.Invoke(); // 내부에서만 호출 가능
}
}
public class UI
{
public void Subscribe(Player player)
{
player.OnPlayerDie += ShowGameOverUI; // 구독
}
void ShowGameOverUI()
{
Debug.Log("게임 오버 UI 표시");
}
}
Player는 사망 이벤트 발생을 발행하고,
UI는 그 이벤트를 구독하는 구조다.
| delegate | event | |
| 외부 호출 가능 여부 | 가능 (Invoke, = 가능) | 불가능 (+=, -=만 가능) |
| 용도 | 내부 콜백, 단순 연결 | 안전한 알림 구조 |
| 캡슐화 수준 | 낮음 | 높음 |
| 사용 예 | AI, 내부 시스템 호출 | UI, 상태 변화 알림 |
유니티이벤트 (UnityEvent)
델리게이트와 이벤트에 대해서 짧게 다시 알아보았으니 이번엔 유니티이벤트에 대해 알아보자.
UnityEvent는 Unity에서 제공하는 시리얼라이즈 가능한 이벤트 클래스다.
즉 코드뿐 아니라 인스펙터 창에서 직접 연결할 수 있는 이벤트 시스템이다.
using UnityEngine;
using UnityEngine.Events;
public class Player : MonoBehaviour
{
public UnityEvent onPlayerDie;
public void Die()
{
Debug.Log("으악 죽음");
onPlayerDie?.Invoke(); // 인스펙터에 등록된 함수들 호출
}
}
이렇게 유니티 이벤트를 등록하면 인스펙터의 onPlayerDie 슬롯에 함수를 드래그 앤 드롭으로 연결할 수 있게 된다.

장점
- 시각적 연결 : 코드 없이 인스펙터에서 직접 이벤트 등록 가능
- 직렬화 지원
- 재사용성
- 타입 안정성
+TIP 프로퍼티도 직렬화 가능하다
[field: SerializeField] public UnityEvent onPetCalled { get; private set; } = new UnityEvent();
비교 정리
| delegate | event | UnityEvent | |
| 정의 위치 | C# 문법 | C# 문법 | Unity 전용 클래스 |
| 외부 접근 | 가능 | 제한적 | 인스펙터 가능 |
| 호출 방식 | 코드에서 직접 Invoke | 내부에서 Invoke | 인스펙터 + 코드 |
| 직렬화 지원 | X | X | O |
| 대표 용도 | 내부 함수 연결 | 코드 레벨 알림 | 인스펙터 기반 알림 |
'Unity' 카테고리의 다른 글
| Unity - UGUI : Unity Graphical User Interface (0) | 2025.10.21 |
|---|---|
| Unity - Spawner에 Singleton Pattern 적용하기 (0) | 2025.10.20 |
| Unity - Coroutine, yield, Invoke, IEnumerator (0) | 2025.10.17 |
| Unity - Rigidbody, Collider - 물리, 충돌 처리 (0) | 2025.10.16 |
| Unity - Transform, 위치 이동 (0) | 2025.10.15 |