Unity エディター拡張機能 (3) - インスペクター ウィンドウを展開します

1. 元のクラスは MonoBehaviour を継承します。たとえば、

public class Map : MonoBehaviour
{
    public int x;
    public int y;
}

以下に示すように、元の効果を確認できます。
ここに画像の説明を挿入

2. エディター クラスを作成し、Editor を継承し、CustomEditor アノテーションを追加します

次に、Editor を継承するクラスを作成し、CustomEditor アノテーションを追加する必要があります。コードは次のとおりです。

//typeof里写要重写Inpsctor事件的类。这里是Map
[CustomEditor(typeof(Map))]
public class MapEditor : Editor
{
    
}

3. OnInspectorGUI() メソッドをオーバーライドします。

コードは以下のように表示されます

[CustomEditor(typeof(Map))]
public class MapEditor : Editor
{
    public override void OnInspectorGUI()
    {
        //绘制原来的窗口,如不增加此行代码。那么就不会绘制原有的变量
        DrawDefaultInspector();

        //接下来,可以在下面添加你个性化的组件
        
        //添加一个按钮
        if (GUILayout.Button("测试"))
        {
            Debug.Log("test");
        }
    }
}

通常のニーズは、元のベースにボタンやその他の操作を追加することなので、ここで、元の変数を描画するコアの DrawDefaultInspector(); を追加する必要があります。追加しない場合は自分で書かないと元の変数が表示されません。

さて、書いた後の効果は以下のようになり、ボタンが出てきます また
ここに画像の説明を挿入
、ウィンドウをMap用に書き換えるので、共通の作業はMapクラスを取得することになります。次のコードを通じて地図を取得できます

Map map = target as Map;

全体的なコードは次のとおりです

[CustomEditor(typeof(Map))]
public class MapEditor : Editor
{
    private Map map;
    
    public override void OnInspectorGUI()
    {
        //绘制原来的窗口,如不增加此行代码。那么就不会绘制原有的变量
        DrawDefaultInspector();

        //接下来,可以在下面添加你个性化的组件
        
        //添加一个按钮
        if (GUILayout.Button("测试"))
        {
            Debug.Log("test");
            
            //拿到原脚本
            map = target as Map;
            Debug.Log($"map.x:{map.x} map.y:{map.y}");
        }

        
    }
}

おすすめ

転載: blog.csdn.net/aaa27987/article/details/130071370