インスペクターウィンドウを展開します
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}");
}
}
}