Unity/UnityEditor

[Unity/UnityEditor] EditorApplication, EditorSceneManager

sorry0101 2023. 5. 17. 12:00

EditorApplication.playModeStateChanged : Play Mode 이벤트

EditorSceneManager.activeSceneChangedInEditMode : Scene 변경 이벤트

InitalizeOnLoad : 클래스 어트리뷰트, 컴파일 또는 플레이 모드에 실행

InitalizeOnLoadMethod: 메소드 어트리뷰트, 컴파일 또는 플레이 모드에 실행

using UnityEngine;
using UnityEditor;
using UnityEngine.SceneManagement;
using UnityEditor.SceneManagement;

[InitializeOnLoad]
public class ReloadManager
{
    static ReloadManager()
    {
        EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
        EditorSceneManager.activeSceneChangedInEditMode += OnActiveSceneChangedInEditMode;
        EditorSceneManager.sceneSaved += OnSceneSaved;
    }

    // Scene Open
    private static void OnActiveSceneChangedInEditMode(Scene currentScene, Scene nextScene)
    {
        Debug.Log("OnActiveSceneChangedInEditMode");
    }
    
    private static void OnPlayModeStateChanged(PlayModeStateChange state)
    {
        switch (state)
        {
            // 플레이모드 진입
            case PlayModeStateChange.EnteredPlayMode:
                Debug.Log("EnteredPlayMode");
                break;

            // 플레이모드 종료
            case PlayModeStateChange.ExitingPlayMode:
                Debug.Log("ExitingPlayMode");
                break;

            // 에디터모드 진입
            case PlayModeStateChange.EnteredEditMode:
                Debug.Log("EnteredEditMode");
                break;
        }
    }

    // Project Load
    [InitializeOnLoadMethod]
    static void OnProjectLoadedInEditor()
    {
        Debug.Log("Project loaded in Unity Editor");
    }
    
    // 수정사항이 있는 씬 저장 시 호출
    private static void OnSceneSaved(Scene scene)
    {
        Debug.Log("OnSceneSaved");
    }
}

 

참고

https://rito15.github.io/posts/unity-editor-init-events/