前面已经写了三篇:

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. selenium IDE安装与使用

    官网介绍: Selenium IDE是一个Firefox插件,它记录并回放用户与浏览器的交互.使用它来创建简单的脚本或者帮助进行探索性测试. 安装流程: 只支持用火狐浏览器安装,可以用火狐浏览器的应用 ...

  2. NE76003单片机调试DS18B20 步骤

    一.硬件部分 GND脚接地: DQ脚接P03,外加4K7上拉电阻: VCC脚接3.3v供电: 二.软件部分 1.配置P03为准准双向 IO类型: void Init_power_gpio(void){ ...

  3. lanya

    var app = getApp()   Page({   data: {   motto: 'Hello World',   openBLE:'打开蓝牙设备',   startBLEDiscover ...

  4. jQuery判断鼠标滚动方向

    var scrolltop = new Array(); var index = 0; scrolltop[0] = 0; $(document).scroll(function(){ index + ...

  5. centos7安装 python3.6,且保留2.7版本

    CENTOS7安装PYTHON3.6 1. 安装python3.6可能使用的依赖# yum install openssl-devel bzip2-devel expat-devel gdbm-dev ...

  6. hibernate NUMBER 精度

    通过Hibernate映射实体时会根据数据库中NUMBER类型的精度,生成相应的POJO类中相对应的主键类型.经过亲测结果如下: NUMBER(1) POJO类中生成的是Boolean publicc ...

  7. Python设计模式 - UML - 状态图(State Machine Diagram)

    简介 状态图主要用于描述对象在其生命周期中各种状态.状态之间的转换过程.触发状态转换的各种事件(条件)及执行的动作. 状态图构建步骤 - 找出适合用状态图描述的类.确定类中需要做状态图的重要对象 - ...

  8. 编写高效的 CSS 选择器

    高效的CSS已经不是一个新的话题了,也不是我一个非得重拾的话题,但它却是我在Sky公司工作之时,所感兴趣的,关注已久的话题. 有很多人都忘记了,或在简单的说没有意识到,CSS在我们手中,既能很高效,也 ...

  9. background-attachment: fixed 在iphone设备失效的解决

    下面为引用,源代码有点问题,自己修改了一下.先做记录,回头再细修. 引用部分,但代码有问题 http://www.ptbird.cn/css-background-attachment--fiexed ...

  10. Smartforms

    Include text Populate indicator in program perform get_text using '0002' ls_detail-vbeln"Header ...