C#을 사용하여 Unity에서 개발할 때 개발자는 이벤트를 처리하는 다양한 방법과 위임 메서드 중에서 선택하는 경우가 많습니다. 일반적으로 사용되는 옵션 중 두 가지는 내장된 C# 대리자 유형인 'Action'과 Unity 고유의 'UnityEvent'입니다. 하지만 정확히 무엇이 그들을 구별하는가? 이번 포스팅에서는 Action과 UnityEvent의 차이점, 장단점을 살펴보겠습니다.
C# Action
C#의 System 네임스페이스의 일부인 Action은 최대 16개의 입력 매개변수를 사용하지만 값을 반환하지 않는 메서드를 가리킬 수 있는 대리자입니다. 이는 사용자 지정 대리자를 정의하지 않고 메서드를 대리자로 표현하는 수단입니다.
다음은 c# action을 사용한 예시 코드입니다.
public class ExampleClass
{
public Action<int> OnNumberChanged;
private int number;
public int Number
{
get { return number; }
set
{
number = value;
OnNumberChanged?.Invoke(number);
}
}
}
위 코드에서는 OnNumberChanged라는 c# action을 선언합니다. 이는 int형 인수를 받는 메서드를 참조하는 델리게이트입니다. Number 프로퍼티가 변경될 때마다 OnNumberChanged에 등록된 모든 메서드가 호출됩니다.
UnityEvent
UnityEngine.Events 네임스페이스의 일부인 UnityEvent는 Unity 검사기와 통합된 강력하고 유형이 안전하며 직렬화된 이벤트 시스템으로, 보다 디자이너 친화적인 설정이 가능합니다.
다음은 Unityevent를 사용한 예시 코드입니다.
public class ExampleClass : MonoBehaviour
{
public UnityEvent OnButtonClicked;
private void Start()
{
// 버튼 클릭 시 OnButtonClicked 이벤트 호출
button.onClick.AddListener(() => OnButtonClicked.Invoke());
}
}
위 코드에서는 OnButtonClicked라는 unityevent를 선언합니다. 이벤트 핸들러는 AddListener 메서드를 사용하여 등록할 수 있습니다. OnButtonClicked 이벤트가 발생하면 등록된 모든 핸들러 메서드가 호출됩니다.
C# Action과 UnityEvent의 차이점
- Unity Inspector와의 통합
Action: 액션은 Unity Inspector와 직접 통합되지 않습니다. Unity 편집기에서 직접 'Action'에 메서드를 할당할 수 없습니다.
UnityEvent: UnityEvent를 사용하는 주요 이유 중 하나는 Unity Inspector와의 통합입니다. 이를 통해 디자이너와 개발자는 추가 코드를 작성하지 않고도 편집기에서 이벤트를 직접 연결할 수 있습니다. - 성능
Action: C#의 간단한 대리자 유형이므로 일반적으로 더 빠르고 오버헤드가 적습니다.
UnityEvent: 추가된 기능 레이어와 일부 기능을 달성하기 위해 리플렉션을 사용한다는 사실 때문에 Action보다 약간 느립니다. 이는 많은 시나리오에서 눈에 띄지 않을 수 있지만 성능이 중요한 섹션에서는 요인이 될 수 있습니다. - 코드의 유연성
Action: 코드 유연성이 뛰어납니다. 간단한 C# 구문을 사용하여 작업을 할당, 결합 또는 지울 수 있습니다.
UnityEvent: 여전히 유연하기는 하지만 코드에서 'UnityEvent'로 작업하는 것은 좀 더 장황할 수 있습니다. 그러나 특정 리스너만 제거하거나 모든 리스너를 호출하는 등의 다른 기능도 제공합니다. - 유형 안전
Action: 강력한 형식입니다. Action을 선언할 때 매개변수 유형을 정의합니다.
UnityEvent: 또한 강력한 유형이지만 다양한 매개변수 유형에 대한 파생 클래스를 정의해야 합니다(예: UnityEvent<int> 또는 UnityEvent<string, float>).
어떤것을 사용할까??
디자이너 상호 작용: 디자이너나 다른 팀 구성원이 코드를 직접 작성하지 않고도 Unity 에디터에서 직접 이벤트를 구성할 수 있도록 하려면 'UnityEvent'가 확실한 승자입니다.
코드가 많은 프로젝트: 프로젝트나 특정 모듈이 코드 중심적이고 디자이너 상호 작용이 많이 필요하지 않은 경우 'Action'이 더 편리하고 성능이 좋을 수 있습니다.
성능 중요: 성능이 가장 중요한 섹션에서는 'Action'이 오버헤드가 낮기 때문에 우위에 있습니다.
결론
Action과 UnityEvent는 모두 Unity 개발 내에서 고유한 목적을 제공합니다. 차이점을 이해하면 개발자는 프로젝트 요구 사항에 맞는 정보에 기초한 결정을 내릴 수 있습니다. 편집기 통합, 코드 단순성 또는 성능 중 무엇을 우선시하는지에 따라 이 두 가지 강력한 도구 중에서 선택할 수 있습니다.
'Unity' 카테고리의 다른 글
Unity의 IL2CPP란? (0) | 2023.06.21 |
---|---|
Unity의 OnApplicationQuit, OnDisable, OnDestroy 이벤트 함수의 차이점 (0) | 2023.05.20 |
Unity : 사운드 재생 (0) | 2023.04.25 |
Unity에서 Transform 컴포넌트와 RectTransform 컴포넌트의 차이점 (0) | 2023.04.24 |
Unity : Invoke (0) | 2023.04.22 |