우선 둘 다 거의 비슷하지만, System.Action 은 순수 C# 의 델리게이트이고,
UnityEngine.Events.UnityAction 은 유니티 용으로 따로 정의된 델리게이트입니다.
그래서 보통 일반 코드에는 Action, UnityEvent 랑 붙을 때만 UnityAction 을 사용하게 됩니다.

사용
using System; // C# 용 Action
using UnityEngine.Events; // 유니티 용 UnityAction
위와 같이 각각 정의돼있는 형식을 가져와 사용할 수 있습니다.
- Action : 닷넷( .NET ) 표준 라이브러리로 System 네임스페이스에 정의돼있습니다.
- UnityAction : 유니티 전용으로 UnityEngine.Events 네임스페이스에 정의돼있습니다.
(참고로, System 과 UnityEngine 을 같이 사용하면 'Random' 처럼 똑같은 이름이 있어 naming conflicts 가 있을 수 있어용.
참고 :https://discussions.unity.com/t/whats-the-difference-between-unityaction-and-c-actions/824924/2 )
공통점
Action a = () => Debug.Log("Action!");
UnityAction ua = () => Debug.Log("UnityAction!");
둘 다 void 반환형 델리게이트이며, (값을 리턴하지 않고 걍 실행만 하는 함수 모양을 담는 타입이죵)
둘 다 제네릭으로 매개변수를 받는 제네릭 델리게이트입니다.
(매개 변수의 타입을 Action<T>, UnityAction<T>처럼 꺽쇠 안에 타입을 쓰는 그거에요)
( Delegate 는 해당 형태의 메서드를 가리킬 수 있는 타입으로, 자세한 건 아래 블로그에 정리해 뒀어용 )
https://bulletprooves.tistory.com/89
[C#] delegate, Action / Func / Predicate
예전 포스트에서 콜백 개념과 함께 한번 다뤘었지만, 다시 한번 정리해봤습니다. delegate델리게이트, 우리말로 대리자. (야 대리불러~ )메서드 시그니처 (매개변수나 반환형) 가 같은 메서드를 가
bulletprooves.tistory.com
UnityAction
UnityEvent 시스템이 내부적으로 사용하는 타입이라
public Button myButton;
void Start()
{
myButton.onClick.AddListener(OnClickBtn); // OnClickBtn은 void 메서드에요
}
void OnDestroy()
{
myButton.onClick.RemoveListener(OnClickBtn); // 필요하면 이렇게 제거할 수 있어용
}
void OnClickBtn()
{
Debug.Log("Hi~ Im clicked!"); // hello~ clicked! ㅋㅋ
}
Action
반대로, 순수 코드 로직, C# 콜백, 로직용도의 델리게이트는 대부분 Action을 쓰게됩니다.
using System;
public class MyHP
{
public Action _onZeroHPCallback;
//public event Action OnHpZero; //event 는 뭐 써도되고 안써도 돼용~
public void GetDamage(int value)
{
어쩌구 저쩌구
if (/* 체력 0 일 때*/)
_onZeroHPCallback?.Invoke();
}
}
너무 졸립군요.
오늘도 좋은 하루 되셔요~ ('. • ᵕ •. `)
'- C# > C# is 도샵' 카테고리의 다른 글
| [C#] ref, out, in 키워드 (3) | 2025.08.30 |
|---|---|
| [C#] Lambda Expression 람다식 (4) | 2025.08.24 |
| [C#] HashSet<T> (1) | 2025.06.17 |
| [C#] virtual abstract interface (0) | 2025.05.20 |
| [C#] System.Array & Copy (0) | 2025.05.12 |