유니티 이벤트 ( Unity Event )
C# 프로그래밍 언어에는 델리게이트와 이벤트가 있다.
델리게이트는 처음 접한다면 사용 방법이 까다롭고 어렵지만 한번 이해하고 난 후엔 편리하게 사용할 수 있다.
유니티 이벤트는 델리게이트와 비슷한 용도로 사용할 수 있지만 유니티엔진에서 더 편리하게 사용할 수 있는 기능이다.
유니티 이벤트는 특정한 일이 발생했을 때 , 다른 함수들을 자동으로 실행하도록 연결해주는 기능이다.
버튼 클릭 시 실행할 함수를 연결 , 적이 죽을 때 효과음 재생 같은 상황에서 자주 쓰인다.
Unity Event 는 C# 의 이벤트 ( delegate ) 개념을 Unity 에디터에서도 시각적으로 사용할 수 있게 만든 클래스이다.
코드로만 연결하지 않아도 인스펙터 ( Inspector ) 창에서 함수를 쉽게 연결할 수 있다.
동작 원리
1. ▼이벤트를 선언한다
using UnityEngine;
using UnityEngine.Events;
public class Door : MonoBehaviour
{
public UnityEvent onOpen; // 문이 열릴 때 발생하는 이벤트
}
2. ▼이벤트를 발생시킨다 ( Invoke )
public void OpenDoor()
{
Debug.Log("문이 열렸습니다!");
onOpen.Invoke(); // 이벤트 호출
}
3. 다른 오브젝트에서 이 이벤트에 리스너 함수를 연결
- 인스펙터에서 Door 컴포넌트를 클릭하면 onOpen 슬롯이 보인다
- 거기에 다른 오브젝트의 함수를 끌어다 놓을 수 있다
- AudioManager.PlayOpenSound( )
- LightController.TurnOnLight( )
이렇게 하면 문이 열릴 때 자동으로 사운드와 조명이 함께 켜진다.
▼코드로 리스너 추가하기
void Start()
{
door.onOpen.AddListener(PlaySound);
}
void PlaySound()
{
Debug.Log("문이 열릴 때 소리 재생!");
}
AddListener( ) 는 "이 함수도 같이 실행해라" 라는 의미이다.
반대로 제거할 때에는 RemoveListener(PlaySound) 를 사용해야 한다.
Unity Event vs C# Event
| 구분 | Unity Event | C# Event / Delegate |
| 연결 방식 | 인스펙터에서 연결 가능하다 | 코드에서만 연결 가능하다 |
| 직렬화 | 가능 ( 씬에 저장된다 ) | 불가능하다 |
| 사용 편의성 | 쉽다 ( 비전문가도 사용 가능하다 ) | 프로그래머용 |
| 성능 | 약간 느리다 | 빠르다 |
정리
유니티 이벤트 : 시각적으로 연결 가능한 이벤트 시스템
AddListener( ) / RemoveListener( ) 로 코드에서 제어 가능
Invoke( ) 로 실행
인스펙터에서 연결하므로 , 비개발자 ( 기획자 / 아티스트 ) 도 쉽게 사용할 수 있다.
참고 자료
Unity Event
https://docs.unity3d.com/kr/2021.3/Manual/UnityEvents.html
C# delegate
https://learn.microsoft.com/ko-kr/dotnet/csharp/distinguish-delegates-events
'🧊Unity Basic > 코루틴&이벤트' 카테고리의 다른 글
| Unity Invoke & C# Invoke (0) | 2025.10.25 |
|---|---|
| 유니티 액션 ( Unity Action ) (0) | 2025.10.20 |
| Coroutine 핵심 키워드 (0) | 2025.10.18 |
| WaitForSeconds vs WaitForSecondsRealtime (0) | 2025.10.18 |
| IEnumerable vs IEnumerator (0) | 2025.10.18 |