コガネブログ

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

【Unity】条件を満たしていない場合は Inspector から Add Component できないようにするエディタ拡張の例

概要

using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
internal static class Example
{
    static Example()
    {
        ObjectFactory.componentWasAdded += OnComponentWasAdded;
    }

    private static void OnComponentWasAdded( Component component )
    {
        // 条件を満たしていない場合
        if ( ... )
        {
            // Add Component しようとしたコンポーネントを削除する
            // 1 フレーム遅らせないと下記のエラーが発生する
            // Assertion failed on expression: 'm_InstanceID != InstanceID_None'
            EditorApplication.delayCall += () => Object.DestroyImmediate( component );
        }
    }
}
  • 例えば自作のコンポーネントを意図しないゲームオブジェクトに
    アタッチできないようにすることができる