效果图:
代码展示:
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
注:字体有点丑,暂时没找到更换字体和颜色得解决方案 找到在更新