⭐ 유니티 액션과 유니티 이벤트
● Unity에서 이벤트 시스템을 구현할 때 자주 쓰이는 기능
● delegate / event 시스템을 Unity 방식으로 확장한 형태
UnityEvent (유니티 이벤트)
● 인스펙터에서 직접 콜백을 연결할 수 있게 만든 Unity 전용 이벤트 클래스
● UnityAction을 관리하는 이벤트 컨테이너
● 인스펙터를 통해 직관적으로 메서드 연결 가능
UnityEvent 선언
public UnityEvent unityEvent;
[SerializeField] private UnityEvent unityEvent;
● public 또는 [serializeField]로 직렬화 하면 인스펙터에서 직접 콜백 연결 가능
UnityEvent 콜백 연결 방법
1. 인스펙터에서 직접 연결하는 방법

● 마치 UGUI의 버튼에서 콜백을 연결하는 것 같은 구조
● 실제로 유니티의 버튼, 토글, 슬라이더 등 많은 UI가 유니티이벤트 기반
2. 코드를 통해 직접 연결하는 방법
[SerializeField] private UnityEvent unityEvent;
private void Start()
{
unityEvent.AddListener(OnCallBack); → OnCallBack 메서드 추가
unityEvent.RemoveListener(OnCallBack); → OnCallBack 메서드 삭제
}
public void OnCallBack()
{
Debug.Log("유니티 이벤트");
}
● AddListener(메서드) → 유니티이벤트에 콜백 추가
● RemoveListener(메서드) → 유니티이벤트에서 콜백 제거
UnityAction (유니티 액션)
● delegate의 일종으로 UnityEvent에 등록하기 위한 표준 타입입니다.
● 버튼에 이벤트를 연결하는 등의 경우 주로 사용합니다.

● UnityAction의 경우 버튼의 이벤트에 정상적으로 연결되지만, C#의 Action의 경우 그렇지 않습니다.
UnityAction 사용 예시
1. 매개변수가 없는 UnityAction
private UnityAction unityAction;
private void Start()
{
unityAction += FirstAction;
unityAction += SecondAction;
unityAction?.Invoke();
}
private void FirstAction()
{
Debug.Log("첫번째 액션!");
}
private void SecondAction()
{
Debug.Log("두번째 액션!");
}
● C#의 delegate와 같이 사용하면 됩니다.
2. 매개변수가 있는 UnityAction
private UnityAction<int, int, float, float> unityAction;
private void Start()
{
unityAction += FirstAction;
unityAction += SecondAction;
unityAction?.Invoke(1, 2, 3, 4);
}
private void FirstAction(int a, int b, float c, float d)
{
Debug.Log("첫번째 액션!");
}
private void SecondAction(int a, int b, float c, float d)
{
Debug.Log("두번째 액션!");
}
● UnityAction은 매개변수를 가질 수 있지만, 4개 까지 가능합니다.
○ 5개 부터는 오류 발생
⭐ Unity 이벤트와 C#의 이벤트 시스템 중 어떤걸 사용할까?
.● Unity 이벤트는 에디터에서 직관적으로 쓸 수 있고, C# 이벤트 시스템은 성능이 약간 우세합니다.
○ 하지만 이 성능차는 백 만개의 이벤트를 생성한다 가정했을 때 이벤트 1개당 0.00015 밀리초 빠른 정도로
굉장히 미세한 차이입니다. (이벤트 퍼포먼스 비교 출처: https://www.jacksondunstan.com/articles/3335)
● 결론은 목적성에 맞게 본인이 원하는 방법을 사용하시면 됩니다.
'개발, IT > 유니티' 카테고리의 다른 글
| [Unity] 유니티 Render Pipeline (렌더 파이프라인) 종류 (0) | 2025.11.04 |
|---|---|
| [Unity] UGUI (Unity Graphical User Interface) (0) | 2025.10.22 |
| [Unity] Coroutine (코루틴) (0) | 2025.10.20 |
| [Unity] 물리 충돌 이벤트 (OnTrigger / OnCollision (0) | 2025.10.20 |
| [Unity] 물리 충돌 처리를 위한 컴포넌트 (Collider / Rigidbody) (0) | 2025.10.19 |