コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】ObjectChangeEvents を使えば Unity エディタの様々なイベントを検知できる

概要

using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
public static class Example
{
    static Example()
    {
        ObjectChangeEvents.changesPublished +=
            ( ref ObjectChangeEventStream stream ) =>
        {
            Debug.Log( "changesPublished" );
        };
    }
}

ObjectChangeEvents.changesPublished は以下のようなタイミングで呼び出される

  • ゲームオブジェクトが生成された
  • ゲームオブジェクトの親が変更された
  • ゲームオブジェクトが削除された
  • ゲームオブジェクトのプロパティが変更された
  • ゲームオブジェクトにコンポーネントが追加された
  • ゲームオブジェクトのコンポーネントが削除された
  • コンポーネントのプロパティが変更された
  • アセットのプロパティが変更された
  • 元となるプレハブが変更されてシーンのプレハブインスタンスが更新された
  • EditorSceneManager.MarkSceneDirty が使用された
  • Undo.RegisterFullObjectHierarchyUndo が使用された
  • Undo.RegisterCreatedObjectUndo が使用された
  • Undo.DestroyObjectImmediate が使用された

引数の ObjectChangeEventStream を使用することで
発生したイベントの詳細な情報を取得できる