objects | 所有对象的类型必须完全相同。 |
为 targetObject
或 targetObjects
创建自定义编辑器。
默认情况下,所选的相应编辑器具有匹配的 CustomEditor 属性。
如果已指定 editorType,则会创建该类型的编辑器。
如果您已创建多个自定义编辑器,其中每个编辑器显示该对象的不同属性,请使用此方法。
如果 objects
具有不同的类型或者未找到相应的编辑器,将返回 NULL。
设想一个 WaypointPathEditor 脚本,用于编辑 wayPoint 数组的变换。
using UnityEditor; using UnityEngine; using System.Collections;
[CustomEditor(typeof(WaypointPath))] public class WaypointPathEditor : Editor {
Editor currentTransformEditor; Transform[] waypoints; Transform selectedTransform; string[] optionsList; int index = 0; WaypointPath myWayPath;
void GetWaypoints() { myWayPath = target as WaypointPath;
if (myWayPath.wayPointArray != null) { optionsList = new string[myWayPath.wayPointArray.Length];
for (int i = 0; i < optionsList.Length; i++) { optionsList[i] = myWayPath.wayPointArray[i].name; } } }
public override void OnInspectorGUI () { GetWaypoints (); DrawDefaultInspector (); EditorGUILayout.Space (); EditorGUI.BeginChangeCheck ();
if (optionsList != null) index = EditorGUILayout.Popup ("Select Waypoint", index, optionsList);
if (EditorGUI.EndChangeCheck ()) { Editor tmpEditor = null;
if (index < myWayPath.wayPointArray.Length) { selectedTransform = myWayPath.wayPointArray[index];
//Creates an Editor for selected Component from a Popup tmpEditor = Editor.CreateEditor(selectedTransform); } else { selectedTransform = null; }
// If there isn't a Transform currently selected then destroy the existing editor if (currentTransformEditor != null) { DestroyImmediate (currentTransformEditor); }
currentTransformEditor = tmpEditor; }
//Shows the created Editor beneath CustomEditor if (currentTransformEditor != null && selectedTransform != null) { currentTransformEditor.OnInspectorGUI (); } } }
附加到 waypath GameObject 的脚本:
using UnityEngine; using System.Collections;
// Note: this is not an editor script. public class WaypointPath : MonoBehaviour { public Transform[] wayPointArray; }