Scene保存時に編集されていた値をリセットするなど、任意の処理をコールバックに登録する方法を解説します。
概要
Unity Editor上で作業している際に、Sceneの保存直前・直後に処理を挟みたいことや、Prefab保存時に処理を挟みたいなどの要望があると思います。 そういった際に使用できるコールバックや属性の使用方法をサンプルコードに示します。
サンプルコード
要点であるメソッドに付与している属性や、購読するイベントについてコメントに記載しています。
using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement; public static class EditorCallbackSample { // この属性を付与した静的メソッドはEditor起動時やスクリプトコンパイル時に呼び出される [InitializeOnLoadMethod] public static void RegisterEditorCallbacks() { Debug.Log("Execute EditorCallbackSample.RegisterEditorCallbacks"); // 呼び出されるたびに重複して登録されるように見えるが、毎回リセットされている挙動だった // ので、明示的に解除する必要はなさそう EditorSceneManager.sceneSaving += OnSceneSaving; EditorSceneManager.sceneSaved += OnSceneSaved; } private static void OnSceneSaving(Scene scene, string path) { // pathには Assets/Path/To/Scene.unity が渡される Debug.Log($"OnSceneSaving: {scene}, {path}"); } private static void OnSceneSaved(Scene scene) { Debug.Log($"OnSceneSaved: {scene}"); } }