본문 바로가기
- C#/C# is 도샵

[C#] [Unity] C# Action 과 UnityAction

by david_동근 2025. 11. 19.

우선 둘 다 거의 비슷하지만, 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