unity编辑器对对象属性的编辑

来源:互联网 发布:全自动编程软件 编辑:程序博客网 时间:2024/05/03 19:47

unity编辑器据说可以写很多的插件,了解过还没有怎么写过,这次试了试,搞了一会,终于搞出来了。

1.新建两个C#代码脚本,一个命名为NPC,另一个为NPCEditor。并且新建一个文件夹命名为Editor,将NPCEditor脚本放入其中。如图1-1


2.NPC脚本的代码如图2-1


3.NPCEditor的脚本如下:

using UnityEngine;using UnityEditor;using System.Collections;[CustomEditor(typeof(NPC))]public class NPCEditor : Editor {//声明脚本对象private SerializedObject npc;//声明属性值private SerializedProperty mynpc;private static bool folds = false;private NPC Target{get{return (NPC)target;}}//ui显示处理,加减数组随想数量的处理private static GUIContentinsertContent = new GUIContent("+", "duplicate this npc"),deleteContent = new GUIContent("-", "delete this npc");//限定按钮的宽度private static GUILayoutOptionbuttonWidth = GUILayout.MaxWidth(20f);void OnEnable(){//给脚本对像和属性赋值npc=new SerializedObject(target);mynpc=npc.FindProperty("mynpc");}public override void OnInspectorGUI(){npc.Update();EditorGUILayout.Space();GUI.changed = false;// 创建NPCfolds = EditorGUILayout.BeginToggleGroup("创建NPC", folds);if (folds){EditorGUILayout.Space();//确保对象数量为0时可以添加。if(GUILayout.Button(insertContent, EditorStyles.miniButtonLeft, buttonWidth)){mynpc.arraySize=1;}//根据对象数组的长度,循环新建npcfor(int i=0;i<mynpc.arraySize;i++){SerializedProperty npc_s=mynpc.GetArrayElementAtIndex(i);EditorGUILayout.BeginVertical();EditorGUILayout.PropertyField(npc_s.FindPropertyRelative("id"));EditorGUILayout.PropertyField(npc_s.FindPropertyRelative("name"));EditorGUILayout.PropertyField(npc_s.FindPropertyRelative("pos_x"));EditorGUILayout.PropertyField(npc_s.FindPropertyRelative("pos_y"));EditorGUILayout.BeginHorizontal();//增加if(GUILayout.Button(insertContent, EditorStyles.miniButtonLeft, buttonWidth)){mynpc.InsertArrayElementAtIndex(i);}//减少if(GUILayout.Button(deleteContent, EditorStyles.miniButtonRight, buttonWidth)){mynpc.DeleteArrayElementAtIndex(i);}EditorGUILayout.EndHorizontal();EditorGUILayout.EndVertical();}if (GUILayout.Button("Update")){//这里可以写处理数据的脚本}npc.ApplyModifiedProperties();}EditorGUILayout.EndToggleGroup();}}
4.在场景中新建一个空对象,并挂上NPC脚本,如图4-1:




0 0
原创粉丝点击