✍️ 개요
Unity Editor 관련 툴을 제작하거나, Editor을 확장할 때 컴파일 시점을 제어해야 합니다.
이런 경우엔 어떻게 구현하면 좋을까요?
그것은... Unity에서 제공하는 애트리뷰트(Attribute)을 사용하면 됩니다!
📌 사용 규칙
※ InitializeOnLoad 애트리뷰트를 통해 컴파일 후 에디터 상으로 Debug 호출 구현
클래스 또는 메소드 상단에 애트리뷰트를 명시합니다.
이때, 정적 생성자 또는 정적 메소드에서만 작동합니다.
또한, 스크립트로 존재하는 것만으로 실행됩니다.
런타임에는 영향을 미치지 않습니다.
📌 에디터 관련
InitailizeOnLoad : Editor가 로드될 때 해당 클래스의 정적 생성자를 자동으로 호출하는 애트리뷰트
Editor 로드 시 필요한 초기화 작업을 수행할 수 있습니다.
InitailizeOnLoadMethod : 클래스 수준이 아닌, 정적 메서드에 대해 초기화를 수행하는 애트리뷰트
클래스 단위가 아닌, 메서드 단위로 Editor 로드 시 필요한 초기화 작업을 수행할 수 있습니다.
위 두 애트리뷰트는 주로 Editor 툴이나 플러그인을 개발할 때, 또는 Editor 상태를 초기화할 때 사용합니다.
📌 플레이 모드 관련
이번에는 Unity Editor에서 Play 버튼을 눌러 플레이 모드로 전환될 때 호출되는 애트리뷰트에 대해 알아보겠습니다.
InitializeOnEnterPlayMode : 플레이 모드로 전환할 때 정적 메소드가 호출되는 애트리뷰트 (호출 시점: Awake, OnEnable 이전)
using UnityEditor 선언이 필요합니다.
RuntimeInitializeOnLoadMethod : 플레이 모드로 전환할 때 정적 메소드가 호출되는 애트리뷰트 (호출 시점: Awake, OnEnable 이후)
using UnityEditor 선언이 필요하지 않습니다.
InitializeOnEnterPlayMode와 다른 점은 호출 시점에 있습니다.
- InitializeOnEnterPlayMode : Awake & OnEnable 이전
- RuntimeInitializeOnLoadMethod : Awake & OnEnable 이후
📌 실행 순서
위 애트리뷰트들의 호출 순서는 다음과 같습니다.
- InitializeOnLoad : 정적 생성자 & 에디터 환경
- InitializeOnEnterPlayMode : 정적 메소드 & 플레이 모드
- InitializeOnLoadMethod : 정적 메소드 & 에디터 환경
- Awake : Game Object을 가질 시
- OnEnable : Game Object을 가질 시
- RuntimeInitalizeOnLoadMethod : 정적 메소드 & 플레이 모드
💡 참고 자료
https://rito15.github.io/posts/unity-editor-init-events/
https://docs.unity3d.com/kr/530/Manual/RunningEditorCodeOnLaunch.html
'유니티(Unity) > 기능 구현' 카테고리의 다른 글
[Unity 기능] 2D Endless Platform 구현 (2편) (0) | 2025.01.02 |
---|---|
[Unity 기능] 2D Endless Platform 구현 (1편) (2) | 2025.01.01 |
[Unity 기능] 커스텀 패키지 제작하기 (1) | 2024.12.20 |
[Unity 기능] Sprite Atlas에 대하여 (1) | 2024.12.15 |
[Unity 기능] 9-Slicing Sprite 제작 (1) | 2024.12.07 |