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

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

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

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

3.NPCEditor的脚本如下:

[csharp]view plaincopy

print?

usingUnityEngine;

usingUnityEditor;

usingSystem.Collections;

[CustomEditor(typeof(NPC))]

publicclassNPCEditor : Editor {

//声明脚本对象

privateSerializedObject npc;

//声明属性值

privateSerializedProperty mynpc;

privatestaticboolfolds =false;

privateNPC Target

{get{return(NPC)target;}}

//ui显示处理,加减数组随想数量的处理

privatestaticGUIContent

insertContent =newGUIContent("+","duplicate this npc"),

deleteContent =newGUIContent("-","delete this npc");

//限定按钮的宽度

privatestaticGUILayoutOption

buttonWidth = GUILayout.MaxWidth(20f);

voidOnEnable()

{

//给脚本对像和属性赋值

npc=newSerializedObject(target);

mynpc=npc.FindProperty("mynpc");

}

publicoverridevoidOnInspectorGUI()

{

npc.Update();

EditorGUILayout.Space();

GUI.changed =false;

// 创建NPC

folds = EditorGUILayout.BeginToggleGroup("创建NPC", folds);

if(folds)

{

EditorGUILayout.Space();

//确保对象数量为0时可以添加。

if(GUILayout.Button(insertContent, EditorStyles.miniButtonLeft, buttonWidth))

{

mynpc.arraySize=1;

}

//根据对象数组的长度,循环新建npc

for(inti=0;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:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,199评论 18 399
  • 《ilua》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 1...
    叶染柒丶阅读 11,751评论 0 11
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 7,533评论 0 17
  • 一. Java基础部分.................................................
    wy_sure阅读 4,104评论 0 11
  • 所谓斜杠青年、也就是一个人可以身兼多职、有个性、可以用多个代名词来代表和形容自己。 今天、在豆瓣上参加了一个资源平...
    芬爷杂谈阅读 749评论 0 0

友情链接更多精彩内容