유니티 UnityEvent란?

UnityEvent 란?

인스펙터에서 이벤트를 노출하는 방법을 제공하여 디자이너와 개발자가 그래픽 인터페이스에서 작업을 할당할 수 있도록 합니다.

UnityEvent의 일반적인 사용법은 다음과 같습니다.

using UnityEngine;
using UnityEngine.Events;

public class MyComponent : MonoBehaviour {
    public UnityEvent myEvent;

    private void Awake() {
        if (myEvent == null)
            myEvent = new UnityEvent();

        myEvent.AddListener(SomeFunction);
    }

    public void TriggerEvent() {
        myEvent.Invoke();
    }

    private void SomeFunction() {
        // Do something here
    }
}


Action과의 차이는?

Action 대리자는 기본 제공 C# 형식입니다. 값을 반환하지 않고(void 반환 유형) 선택적으로 매개 변수를 사용하는 메서드를 캡슐화하는 데 사용됩니다. UnityEvent와는 반대로 인스펙터에 노출되지 않습니다!

 

Action의 일반적인 사용법은 다음과 같습니다.

using System;

public class MyOtherComponent {
    public Action myAction;

    public MyOtherComponent() {
        myAction += SomeFunction;
    }

    public void TriggerAction() {
        myAction?.Invoke();
    }

    private void SomeFunction() {
        // Do something here
    }
}

 

그 외 주요 차이점

  1. Inspector 통합: UnityEvent는 Actions가 제공하지 않는 Unity Editor와의 통합 수준을 제공합니다. 이를 통해 디자이너와 개발자는 추가 코드를 작성하지 않고(사진 1참고)도 이벤트에 대한 응답을 연결할 수 있습니다.
  2. 성능: Action은 UnityEvents보다 더 가볍고 더 나은 성능을 제공합니다. 
  3. 직렬화: UnityEvents는 직렬화가 가능합니다. 즉, 장면을 저장하고 로드할 때 상태를 유지합니다. 이것은 Actions의 경우가 아닙니다.
  4. 사용 용이성: 프로그래머가 아니거나 C# 델리게이트에 익숙하지 않은 사람들은 Unity Inspector 통합으로 인해 UnityEvents를 더 쉽게 사용할 수 있습니다.

추가 코드 구현 없이 인스펙터에서 바로 Event를 추가할 수 있다!