Unity - EventSystem (이벤트 시스템)

2025. 10. 20. 15:35·Unity

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
'Unity' 카테고리의 다른 글
  • Unity - UGUI : Unity Graphical User Interface
  • Unity - Spawner에 Singleton Pattern 적용하기
  • Unity - Coroutine, yield, Invoke, IEnumerator
  • Unity - Rigidbody, Collider - 물리, 충돌 처리
ellug
ellug
Web / App / Game Dev
  • ellug
    dev.ellug
    ellug
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • Javascript (React, Next) (1)
      • C# (66)
      • Graphics (1)
      • Unity (25)
      • 프로그래머스 (0)
        • Lv.0 (0)
        • Lv.1 (0)
        • Lv.2 (0)
        • Lv.3 (0)
      • AI Agent (0)
      • StableDiffusion (0)
      • ETC (1)
      • 잡담 (0)
      • 유머 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    useState
    큐
    firebase
    console
    Design Pattern
    유니티
    콘솔
    unity
    Network
    C#
    스택
    자료구조
    function
    interface
    Photon
    stack
    네트워크
    알고리즘
    class
    추상 클래스
    Abstract
    inputsystem
    클래스
    struct
    list
    delegate
    터미널
    게임
    Queue
    최적화
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ellug
Unity - EventSystem (이벤트 시스템)
상단으로

티스토리툴바