视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
unity3d游戏开发之Unity自定义编辑器界面
2025-09-30 01:33:41 责编:小OO
文档
好吧,我承认自己是个强迫症患者,在做项目的时候 发现脚本的Inspector面板上暴露的密密麻麻的变量头皮一阵发麻~~~

举个例子 比如我要写 一个 Enemy的类,我希望这个Enemy里面包括了所有的 敌人类型,比如 飞机 坦克等等。

但是由于类型不同,他们的一直变量类型也不同,比如 坦克的 变量类型可能有 移动速度,子弹类型,或者其他的,飞机的变量类型有飞行速度,等等。

如果不加整理 那么在Inspector 面板就会暴露出密密麻麻的 变量 不仅头晕,而且不利于调试。

其实就是我强迫症发作了,我只想面板显示我想要的东西。

好吧 下面开始

首先 我新建一个 test1 脚本 C#

这篇文章来自狗刨学习网

我们的目标是通过枚举类型来定义当前物体的类型。如果m_type是 player,那么就显示 playerlife;如果是 enemy 就显示enemylife。

下面我们需要写一个脚本去重写Inspector界面。

新建一个文件夹 命名为 Editor 因为我们需要  using unityEditor 而是用这个的脚本必须在名字为Editor 的文件下。

在Editor 文件下创建一个C#新脚本 名字随意 我的叫 Inspector_test1 

首先 头部 加入 using UnityEditor 

[CunstomEditor(typeof(test1))]

继承改为 Editor 

首先我们要序列化一个物体 就是说脚本会附在一个Object上  还有脚本的变量  

在OnEnable() 里面 初始化 Objcet对象 抓取脚本里面的属性

然后 再重写 OnInspectorGUI()  

首先是更新脚本的信息

test.Update();

然后显示枚举类型变量 m_type 这个变量是一定要暴露出来的 因为通过它来定义这个物体的属性 是player 还是 enemy 

EditorGUILayout.propertyField(m_type);

然后 我们来判断这个m_type是哪个值 是player 还是enemy. 

我们通过 SerializedProperty.enumValueIndex 枚举值索引 来检索当前枚举类型的变量值是哪个  例如在 type 枚举类型里面 player 的枚举值索引下标为 0 enemy  的枚举值索引下标为 1

这样 我们通过判断 m_type 的 枚举下标的值就可以推断出 当前值的哪一个,进而进行相关的操作了。

最后,通过

SerializedObject.ApplyModifiedProperties 应用修改的属性

效果 

下载本文
显示全文
专题