前面已经写了三篇:

Unity3D编辑器扩展(一)——定义自己的菜单按钮

Unity3D编辑器扩展(二)——定义自己的窗口

Unity3D编辑器扩展(三)——使用GUI绘制窗口

今天写第四篇,扩展自己的自定义组件。

通常我们使用继承自 Editor 的自定义编辑器类,来扩展自己的组件的检视面板和编辑器,并配合 CustomEditor 特性语法,附加该编辑器到一个自定义组件。

首先我们先定义一个组件 Player

 using UnityEngine;

 public class Player : MonoBehaviour
{
public int armor = ; //护甲
public int attack = ; //攻击力
}

一个简单的 Player 组件,有护甲和攻击力两个属性,挂载后,效果如下:

接下来我们对 Player 进行扩展,代码如下:

using UnityEngine;
using UnityEditor; [CustomEditor(typeof(Player))]
public class EditorTest : Editor
{
public override void OnInspectorGUI()
{
var _target = (Player)(serializedObject.targetObject);
_target.armor = EditorGUILayout.IntSlider("护甲", _target.armor, , );
ProgressBar(_target.armor / 100f, "护甲");
_target.attack = EditorGUILayout.IntSlider("攻击力", _target.attack, , );
ProgressBar(_target.attack / 100f, "攻击力");
}
private void ProgressBar(float value, string label)
{
Rect rect = GUILayoutUtility.GetRect(, );
EditorGUI.ProgressBar(rect, value, label);
EditorGUILayout.Space();
}
}

效果图:

是不是感觉漂亮了很多,直观了很多。这样我们就可以把很多UI控件扩展到我们的组件上,显得高大上。

实效上面这种效果,还有另外一种方法:

using UnityEngine;
using UnityEditor; [CustomEditor(typeof(Player))]
public class EditorTest : Editor
{
private SerializedProperty attack;
private SerializedProperty armor;
void OnEnable()
{
attack = serializedObject.FindProperty("attack");
armor = serializedObject.FindProperty("armor");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.IntSlider(armor, , , new GUIContent("护甲"));
ProgressBar(armor.intValue / 100f, "护甲");
EditorGUILayout.IntSlider(attack, , , new GUIContent("攻击力"));
ProgressBar(attack.intValue / 100f, "攻击力");
serializedObject.ApplyModifiedProperties();
}
private void ProgressBar(float value, string label)
{
Rect rect = GUILayoutUtility.GetRect(, );
EditorGUI.ProgressBar(rect, value, label);
EditorGUILayout.Space();
}
}

这种方法和第一种方法效果是一样的,就不上图了。

扩展自定义组件我们除了写编辑器类以外,还会用到很多特性,特性的使用在下一节。

Unity3D编辑器扩展(四)——扩展自己的组件的更多相关文章

  1. Unity3D编辑器扩展(六)——模态窗口

    前面我们已经写了5篇关于编辑器的,这是第六篇,也是最后一篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)—— ...

  2. Unity3D编辑器扩展(五)——常用特性(Attribute)以及Selection类

    前面写了四篇关于编辑器的: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 Unity3D ...

  3. 扩展Unity3D编辑器的脚本模板

      近期在学习Shader时感觉Shader语言參数众多.语法诡异,假设每次都从头開始写Shader一定是一件痛苦的事情.假设能够在本地定义好一组标准的Shader模板,这样当我们须要实现某些效果相似 ...

  4. hiho一下 第九十五周 数论四·扩展欧几里德

    题目 : 数论四·扩展欧几里德 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho周末在公园溜达.公园有一堆围成环形的石板,小Hi和小Ho分别站在不同的石板上 ...

  5. 【干货】.NET开发通用组件发布(四) 日志记录组件

    组件介绍和合作开发 http://www.cnblogs.com/MrHuo/p/MrHuoControls.html 日志记录组件功能介绍 通过基类Logger,实现了文本记录日志和数据库记录日志两 ...

  6. 编译安装PHP7并安装Redis扩展Swoole扩展

    编译安装PHP7并安装Redis扩展Swoole扩展 在编译php7的机器上已经有编译安装过php5.3以上的版本,从而依赖库都有了 本php7是编译成fpm-php 使用的, 如果是apache那么 ...

  7. unity3D Socket连接C#server出现unity3D编辑器再次启动连接 unity3D编辑器马上卡死

    unity3D Socket与C#server第一次连接时通讯正常.客服端段关闭后.unity3D编辑器再次启动连接 unity3D编辑器马上卡死 原因是Socket处于异步状态,而异步线程是不受Un ...

  8. 扩展javascript扩展(类,对象,原型)

     扩展javascript扩展(类,对象,原型)

  9. .NET:不要使用扩展方法扩展Object对象。

    C#的扩展方法算是一种Minin(掺入)机制,掺入方法有其合理的使用场景,这里说说一种不好的使用场景(个人意见):不要使用扩展方法扩展Object对象.扩展Object会对所有类型的示例有侵入,特别是 ...

随机推荐

  1. 使用hexo在GitHub上无法上传博客

    原以为是秘钥或者其他错误,后来发现是邮箱设置的问题 在GitHub的你账号网页上右上角,个人的登录退出的位置,找到setting: setting->emails->Keep my ema ...

  2. DOM节点遍历

    "DOM2级遍历和范围"模块定义了两个用于辅助完成顺序遍历DOM结构的类型:NodeIterator 和 TreeWalker .这两个类型能够根据给定的节点对DOM结构进行深度优 ...

  3. Java框架spring 学习笔记(一):SpringBean、ApplicationContext 容器、BeanFactory容器

    Spring容器是Spring框架的核心,容器可以创建对象并创建的对象连接在一起,配置和管理他们的整个生命周期.Spring 容器使用依赖注入(DI)来作为管理应用程序的组件,被称为 Spring B ...

  4. 字节、字、bit、Byte、byte的关系区分

    1.位(bit)             来自英文bit,音译为"比特", 表示二进制位.位是计算机内部数据存储最小单位,11010100是一个8位二进制数.一个二进制位只可以表示 ...

  5. Tcp协议细节(三次握手,四次握手)

    利用滑动窗口实现流量控制(让发送方的发送速率不要太快,让接收方来得及接收) (发送窗口的发送窗口不能超过接收方给出的接收窗口的数值) 拥塞控制 拥塞:在某段时间,对网络中某一资源的需求超过了该资源所能 ...

  6. mysql保存乱码(C#)

    解决办法只有一个就是在配置文件中强制指定编码格式:<add name="TSDBEntities" connectionString="metadata=res:/ ...

  7. “XmlDocumentationProvider”不实现接口成员“IDocumentationProvider.GetDocumentation(HttpControllerDescriptor)”错误的解决方案

    这东西就是这样,会的不难,难的不会.以前我配置过 WebAPI 的 HelpPage 功能,第一步先安装:Microsoft.AspNet.WebAPi.HelpPage,第二步安装:WebApiTe ...

  8. localhost换成127.0.0.1和本机IP打不开本地项目了的问题

    点击桌面右下角的小三角, iis express右键—>显示所有应用程序—>点击网站名称,配置文件路径,找到配置文件,以记事本打开, 按照configuration--system.app ...

  9. skynet记录6:定时器

    稍后填坑 kernel中,每一次时钟中断会trap到kernel code,这个时间间隔称之为jiffies,每秒钟发生的次数为HZ 如果是4核,分配到每个核就是HZ/4 cat /boot/conf ...

  10. Image 图片

    随机矩阵画图 这一节我们讲解怎样在matplotlib中打印出图像.这里打印出的是纯粹的数字,而非自然图像.下面用 3x3 的 2D-array 来表示点的颜色,每一个点就是一个pixel. impo ...