效果圖:
代碼展示:
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
注:字體有點醜,暫時沒找到更換字體和顏色得解決方案 找到在更新