UnityEvent, UnityAction, Action(.NET)에 관하여
먼저 UnityAction과 Action의 차이 및 기타사항
UnityAction은 UnityEngine.Events 네임스페이스에 정의되어 있으며, Unity의 이벤트 시스템과 긴밀하게 통합되어 있다. 이런 이유로 UnityAction을 사용하는 이벤트는 Unity인스펙터에서 직접 조작할 수 있다.
- UnityEvent와 그 파생 클래스들은 Unity 인스펙터에서 시각적으로 표시되고, 사용자가 인스펙터를 통해 이벤트 리스너를 추가하거나 제거할 수 있다. 이는 UnityAction을 사용할 때 특히 유용하다. 예를 들어, 버튼 클릭 이벤트에 메서드를 할당하는 경우, 인스펙터에서 드래그 앤 드롭으로 간단히 설정할 수 있다.
- Action대리자를 사용하는 코드는 이러한 인스펙터 기반의 시각적 편집 기능을 제공하지 않는다. 주로 코드 내에서 사용되며, 이벤트 리스너를 프로그래밍 방식으로 추가하고 제거해야 한다. 유연성과 재사용성은 높지만, 인스펙터를 통한 직접적인 시각적 조작은 지원하지 않는다.
UnityAction은 UnityEvent에 의해 호출될 콜백 함수들의 타입이다. 이를 통해 스크립트에서 이벤트 리스너를 추가하거나 제거할 수 있다.
event 한정자를 사용하면 외부 클래스에서 이벤트에 직접 접근하여 구독자를 추가(+=)하거나 제거(-=)할 수 있지만, 이벤트를 직접 발생시키거나 다른방식으로 조작하는 것은 이벤트를 소유한 클래스 내에서만 가능하다. 이는 캡슐화를 강화하고, 외부에서 이벤트를 임의로 발생시키거나 구독자 목록을 변경하는 것을 방지한다.
'Unity' 카테고리의 다른 글
유니티 C# 열거형 네이밍 관례 Unity C# Enum Naming Conventions (0) | 2024.02.26 |
---|---|
Unity C# 클래스 정의에서 콜론(:) 이해하기 (1) | 2024.02.26 |
Destroy와 DestroyImmediate의 차이 (0) | 2024.02.22 |
Rigidbody2D의 velocity를 Vector2.zero로 했음에도 불구하고 zero가 안 먹히는 현상 (0) | 2024.02.21 |
Physics2d.Raycast 에서 감지가 되지 않을 때 When Physics2d.Raycast is not detected (0) | 2024.02.21 |