unity-Editor自定義Inspector面板

效果圖:
在這裏插入圖片描述
代碼展示:

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(MapOperation))]
public class MapOperationEditor : Editor
{

    public override void OnInspectorGUI()
    {
       // DrawDefaultInspector();

        MapOperation myScript = (MapOperation)target;
        bool allowSceneObjects = !EditorUtility.IsPersistent(target);
        #region 輸出世界座標
        //if (myScript.tempObj == null)
        //    GUI.color = Color.red;
        //else
        //    GUI.color = Color.white;
        //myScript.tempObj = (Transform)EditorGUILayout.ObjectField("輸出物品世界座標", myScript.tempObj, typeof(Transform), allowSceneObjects);
        //GUI.color = Color.white;
        //if (GUILayout.Button("輸出"))
        //{
        //    if (myScript.tempObj == null) return;
        //    Debug.Log(myScript.tempObj.position);
        //}
        //EditorGUILayout.Space();
        //EditorGUILayout.Space();
        //EditorGUILayout.Space();
        #endregion

        #region 重命名屬性

        myScript.nameByPos = EditorGUILayout.Toggle("是否根據座標位置命名", myScript.nameByPos);

       

        myScript.IsMapEditor = EditorGUILayout.Toggle("是否用於地圖編輯器命名", myScript.IsMapEditor);
        myScript.index = EditorGUILayout.IntSlider("方格在父物體下的層次數", myScript.index, 1,2 );

        if (myScript.Parent == null)
            GUI.color = Color.red;
        else
            GUI.color = Color.white;
        myScript.Parent = (Transform)EditorGUILayout.ObjectField("重命名物體父物體", myScript.Parent, typeof(Transform), allowSceneObjects);
        if (myScript.nameByPos)
        {
            if (myScript.startTrans == null)
                GUI.color = Color.red;
            else
                GUI.color = Color.white;
            myScript.startTrans = (Transform)EditorGUILayout.ObjectField("XZ爲二維座標軸的第一個格子", myScript.startTrans, typeof(Transform), allowSceneObjects);

            //if (myScript.X == -100)
            //    GUI.color = Color.red;
            //else
            //    GUI.color = Color.white;
            //myScript.X = EditorGUILayout.DoubleField("方格起始點X座標", myScript.X);
            //if (myScript.Z == -100)
            //    GUI.color = Color.red;
            //else
            //    GUI.color = Color.white;
            //myScript.Z = EditorGUILayout.DoubleField("方格起始點Z座標", myScript.Z);
            if (myScript.size == new Vector2Int(0, 0))
                GUI.color = Color.red;
            else
                GUI.color = Color.white;
            myScript.size = EditorGUILayout.Vector2IntField("方格規格", myScript.size);
        } 
        GUI.color = Color.white;
        if (GUILayout.Button("重命名"))
        {
            if (myScript.size == new Vector2Int(0, 0)/* || myScript.X==-100|| myScript.Z == -100*/||
                myScript.Parent == null||
                myScript.startTrans==null) return;
                myScript.Rename();
        }
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        #endregion

        #region 剔除格子
        if (myScript.DeleteConfig == null)
            GUI.color = Color.red;
        else
            GUI.color = Color.white;
        myScript.DeleteConfig = (TextAsset)EditorGUILayout.ObjectField("剔除格子數據表", myScript.DeleteConfig, typeof(TextAsset), allowSceneObjects);
        GUI.color = Color.white;
        if (GUILayout.Button("剔除格子"))
        {
            if (myScript.DeleteConfig == null) return;
            myScript.DeleteNullGrids();
        }
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        #endregion
    }

}

其中MapOperation就是自定義面板的腳本,需要繼承自MonoBehaviour

注:字體有點醜,暫時沒找到更換字體和顏色得解決方案 找到在更新

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章