✍️ 개요
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/
유니티 - 컴파일, 게임 시작 시 실행되는 애트리뷰트 정리
공통 특징
rito15.github.io
Unity - Scripting API: InitializeOnEnterPlayModeAttribute
Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close
docs.unity3d.com
https://docs.unity3d.com/kr/530/Manual/RunningEditorCodeOnLaunch.html
실행 시 에디터 스크립트 코드 실행 - Unity 매뉴얼
때로는 Unity가 사용자의 작업을 요구하지 않고 실행되는 즉시 프로젝트에서 일부 에디터 스크립트 코드를 실행할 수 있는 것이 유용합니다. 정적 생성자가 있는 클래스에 InitializeOnLoad 속성을 적
docs.unity3d.com
'유니티(Unity) > 콘텐츠 기능' 카테고리의 다른 글
[Unity 기능] 2D Endless Platform 구현 (2편) (0) | 2025.01.02 |
---|---|
[Unity 기능] 2D Endless Platform 구현 (1편) (2) | 2025.01.01 |
[Unity 기능] Sprite Atlas에 대하여 (1) | 2024.12.15 |
[Unity 기능] 9-Slicing Sprite 제작 (1) | 2024.12.07 |
[기능] GetComponent 최적화 (CachedMonobehaviour.cs) (1) | 2024.11.11 |