コガネブログ

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

【Unity】エディタ拡張でゲームオブジェクトの作成、移動、削除、複製時のコールバックを実装できる「Editor Extensions for Unity Editor」紹介

はじめに

「Editor Extensions for Unity Editor」を Unity プロジェクトに導入することで
エディタ拡張でゲームオブジェクトの
作成、移動、削除、複製時のコールバックを実装できるようになります

使用例

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

[InitializeOnLoad]
public static class Example
{
    static Example()
    {
        ObjectPostprocessor.assetAdded      += OnAssetAdded         ; // アセットが追加された
        ObjectPostprocessor.assetMoved      += OnAssetMoved         ; // アセットが移動された
        ObjectPostprocessor.assetDeleted    += OnAssetDeleted       ; // アセットが削除された
        ObjectPostprocessor.assetDuplicated += OnAssetDuplicated    ; // アセットが複製された
        ObjectPostprocessor.prefabConnected += OnPrefabConnected    ; // プレハブが作成された

        ObjectPostprocessor.gameObjectAdded         += OnGameObjectAdded        ; // ゲームオブジェクトが追加された
        ObjectPostprocessor.gameObjectSceneMoved    += OnGameObjectSceneMoved   ; // ゲームオブジェクトがシーンをまたいで移動された
        ObjectPostprocessor.gameObjectDeleted       += OnGameObjectDeleted      ; // ゲームオブジェクトが削除された
        ObjectPostprocessor.gameObjectDuplicated    += OnGameObjectDuplicated   ; // ゲームオブジェクトが複製された
        ObjectPostprocessor.prefabInstantiated      += OnPrefabInstantiated     ; // プレハブのインスタンスが作成された
    }

    // アセットが追加された
    private static void OnAssetAdded( string assetPath )
    {
    }

    // アセットが移動された
    private static void OnAssetMoved( string assetPathFrom, string assetPathTo )
    {
    }

    // アセットが削除された
    private static void OnAssetDeleted( string assetPath )
    {
    }

    // アセットが複製された
    private static void OnAssetDuplicated( string assetPathFrom, string assetPathTo )
    {
    }

    // プレハブが作成された
    private static void OnPrefabConnected( GameObject gameObjectFrom, string assetPathTo )
    {
    }

    // ゲームオブジェクトが追加された
    private static void OnGameObjectAdded( GameObject gameObject )
    {
    }

    // ゲームオブジェクトがシーンをまたいで移動された
    private static void OnGameObjectSceneMoved( Scene sceneFrom, GameObject gameObject )
    {
    }

    // ゲームオブジェクトが削除された
    private static void OnGameObjectDeleted( Scene scene )
    {
    }

    // ゲームオブジェクトが複製された
    private static void OnGameObjectDuplicated( GameObject gameObjectFrom, GameObject gameObjectTo )
    {
    }

    // プレハブのインスタンスが作成された
    private static void OnPrefabInstantiated( string assetPathFrom, GameObject gameObjectTo )
    {
    }
}