기술 자료

Unity Engine

Unity Engine

에디터 실행 시 프로젝트 코드 실행

Run Edit mode code automatically when the Editor launches using the InitializeOnLoad attribute.
읽는 시간 1분최근 업데이트: 한 달 전

때로는 Unity 에디터가 실행될 때 편집 모드 프로젝트 코드의 일부가 사용자 작업 없이도 즉시 실행되도록 하면 도움이 될 수 있습니다. 이를 위해서는 정적 생성자가 있는 클래스에 InitializeOnLoad 속성을 적용하면 됩니다. 정적 생성자는 클래스와 이름이 같고
static
으로 선언되며 반환 유형이나 매개 변수가 없는 함수입니다. 자세한 내용은 Microsoft C# 기술 자료의 정적 생성자에서 확인하십시오.
using UnityEngine;using UnityEditor;[InitializeOnLoad]public class Startup { static Startup() { Debug.Log("Up and running"); }}
정적 생성자는 정적 함수 또는 클래스의 인스턴스가 사용되기 전에 항상 호출되지만,
InitializeOnLoad
속성을 사용하면 에디터가 실행될 때 호출됩니다. 이 속성이 있는 정적 생성자는 프로젝트의 스크립트가 재컴파일될 때 호출됩니다. 이를 도메인 재로드라고도 합니다. 이는 다음 경우에 발생합니다.
  • Unity가 먼저 프로젝트를 로드합니다.
  • Preferences 창의 Asset Pipeline 섹션에서 Auto Refresh가 활성화된 경우 Unity는 스크립트의 수정 사항을 감지합니다.
  • Domain Reload가 Play Mode 설정에서 활성화된 경우 Play Mode를 시작합니다.
로드 시 초기화 기능은 예컨대 에디터 애플리케이션에 대한 '프레임 업데이트'라고 할 수 있는 일반 콜백을 설정할 때 사용할 수 있습니다. EditorApplication 클래스에는 에디터가 실행되는 동안 1초에 여러 번 호출되는 update라는 델리게이트가 있습니다. 다음 코드 예시는
[InitializeOnLoad]
속성이 적용된 작은 커스텀 클래스를 정의하고
EditorApplication.update
델리게이트에 멤버 메서드를 할당하여, 에디터가 실행될 때 해당 메서드가 함께 실행되어 콘솔에
Updating
을 출력하도록 합니다.
using UnityEditor;using UnityEngine;// InitializeOnLoad ensures this code runs on Editor launch[InitializeOnLoad]class MyClass{ // Define a static constructor in which we assign the custom Update method to the delegate static MyClass () { EditorApplication.update += Update; } // Define a method with the required signature that performs work we want to do on launch static void Update () { Debug.Log("Updating"); }}

추가 리소스