作者:个信2502907653 | 来源:互联网 | 2023-09-13 11:16
效果图:
代码展示:
using UnityEngine;
using UnityEditor;[CustomEditor(typeof(MapOperation))]
public class MapOperationEditor : Editor
{public override void OnInspectorGUI(){MapOperation myScript = (MapOperation)target;bool allowSceneObjects = !EditorUtility.IsPersistent(target);#region 输出世界坐标#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;elseGUI.color = Color.white;myScript.Parent = (Transform)EditorGUILayout.ObjectField("重命名物体父物体", myScript.Parent, typeof(Transform), allowSceneObjects);if (myScript.nameByPos){if (myScript.startTrans == null)GUI.color = Color.red;elseGUI.color = Color.white;myScript.startTrans = (Transform)EditorGUILayout.ObjectField("XZ为二维坐标轴的第一个格子", myScript.startTrans, typeof(Transform), allowSceneObjects);if (myScript.size == new Vector2Int(0, 0))GUI.color = Color.red;elseGUI.color = Color.white;myScript.size = EditorGUILayout.Vector2IntField("方格规格", myScript.size);} GUI.color = Color.white;if (GUILayout.Button("重命名")){if (myScript.size == new Vector2Int(0, 0)||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;elseGUI.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
注:字体有点丑,暂时没找到更换字体和颜色得解决方案 找到在更新