UnityEvent 사용하기
UnityEvent는 Unity에서 추가 프로그래밍 없이 유저 정의 Callback을 쉽게 설정할 수 있는 방법입니다. 이 문서에서는 UnityEvent의 개념과 사용법을 설명하고, 다양한 활용 예제를 소개하겠습니다.
UnityEvent란?
UnityEvent는 UnityEngine.Events 네임스페이스에 포함되어 있으며, 스크립트에서 정의한 이벤트를 인스펙터를 통해 쉽게 설정하고 사용할 수 있습니다. 이 기능은 주로 UI 이벤트나 게임 로직에서 유용하게 사용됩니다.
장점
- 콜백 설정의 용이성: 개발자는 코드 작성 없이도 UnityEditor에서 콜백을 설정할 수 있습니다.
- 유지 관리: UnityEvent는 콜백을 강력하게 유지하기 때문에, 가비지 컬렉션으로 인한 문제 없이 오랜 시간동안 사용할 수 있습니다.
제한 사항
- 정적 함수 호출 및 일반 타입 함수에 제한이 있습니다.
- 대리자와 비슷하게 대상 레퍼런스에 대한 관리가 필요합니다.
UnityEvent 설정 방법
UnityEvent를 사용하기 위해서는 다음 단계를 따라야 합니다.
- UnityEngine.Events 임포트 확인
스크립트 상단에using UnityEngine.Events;
를 추가합니다. - 콜백 슬롯 추가
스크립트를 구성하는 객체를 선택한 후, 인스펙터에서 콜백 슬롯을 추가합니다. - 대상 객체 선택
콜백을 수신할 UnityEngine.Object를 선택합니다. - 함수 선택
호출할 함수를 선택하여 연결합니다.
UnityEvent의 두 가지 호출 타입
UnityEvent는 인스펙터에서 설정할 때 두 가지 종류의 함수 호출을 지원합니다.
- 정적 호출: UI에서 미리 설정된 인수를 사용하여 호출합니다.
- 동적 호출: 코드에서 인수를 전달하고 호출되는 UnityEvent 타입에 바인드됩니다. UI는 유효한 동적 호출만 표시합니다.
Generic UnityEvent
UnityEvent는 기본적으로 void 반환 함수를 지원합니다. 함수의 인수가 4개 이하일 때 다이나믹하게 바인딩이 가능합니다. 이를 위해 Custom UnityEvent 클래스를 정의할 수 있습니다.
예제: Custom UnityEvent 사용하기
아래 코드는 문자열 인자를 받을 수 있는 Custom UnityEvent 클래스를 정의하는 방법을 보여줍니다.
[System.Serializable]
public class StringEvent : UnityEvent<string> {}
이렇게 정의된 클래스를 통해 문자열 인자를 받아 필요한 콜백을 실행할 수 있습니다.
활용 예제
- UI 버튼 클릭 이벤트
UnityEvent를 활용하여 UI 버튼 클릭 시 특정 이벤트를 연동하여 사용할 수 있습니다.
- 게임 오브젝트 상태 변경
다른 스크립트나 오브젝트에서 발생하는 사건에 반응하여 게임 오브젝트의 상태를 변경할 수 있습니다.
- 레벨 업 시스템
플레이어가 레벨 업할 때마다 특정 이벤트를 트리거하여 UI를 갱신할 수 있습니다.
결론
UnityEvent는 콜백 설정을 간단하게 만들어 주는 유용한 기능입니다. 이를 통해 코드의 복잡함을 줄이고, 더 명확한 이벤트 관리가 가능해집니다. 다양한 상황에서 적극적으로 활용해 보시기 바랍니다.