这么晚了准备睡觉的时候,去学习了一会. 发现一个标题好奇的点进去. 居然是自定义绘制属性. 在前几天这个问题把我难住了,没想到几分钟就能解决的问题。 我花了半天时间使用反射去解决。。。 如果我们想要让属性自定义绘制窗体,首先会想到扩展InspectorEditor, 这章讲解.原来属性可以独立绘制,亮瞎我的双眼!
如图:
步骤:
1. 定义绘制特性描述类(以数据提供给 –> 绘制类 –> 绘制)
2. 定义属性自定义绘制类
3. 给一个字段添加你的特性
1. 绘制特性描述类
using UnityEngine;
using System.Collections;
using UnityEditor; /// <summary>
/// 必须继承PropertyAttribute
/// </summary>
public class MyRangeAttribute : PropertyAttribute { //绘制需要的数据
public float min;
public float max;
public string label; public MyRangeAttribute(float min, float max,string label = "")
{
this.min = min;
this.max = max;
this.label = label;
} }
2. 属性绘制类
using UnityEngine;
using System.Collections;
using UnityEditor; /// <summary>
/// 继承PropertyDrawer, 必须放入Editor文件夹下
/// </summary>
[CustomPropertyDrawer(typeof(MyRangeAttribute))]
public class MyRangeAttributeDrawer : PropertyDrawer {
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
//获取绘制描述类
MyRangeAttribute range = this.attribute as MyRangeAttribute; //判断字段是那种类型,进行不同的绘制
if(property.propertyType == SerializedPropertyType.Float)
{
Debug.Log("float类型");
EditorGUI.Slider(position,property,range.min,range.max,label);
}else if(property.propertyType == SerializedPropertyType.Integer)
{
Debug.Log("Integer类型");
if (range.label != string.Empty)
{
label.text = range.label;
} EditorGUI.IntSlider(position, property, (int)range.min, (int)range.max, label);
} }
}
组件:
using UnityEngine;
using System.Collections; public class MyCompoment : MonoBehaviour { [MyRangeAttribute(0,10,"血值")]
public int int1;
public string string1; }
项目资源图:
Unity 扩展属性自定义绘制的更多相关文章
-
PowerDesigner建数据库模型增加自定义扩展属性
PowerDesigner自7.x新增加一个特性,就是允许用户通过扩展模型的方式扩展模型的属性,但到底怎用一直搞不清楚.今天和同事商量准备直接在程序的Metadata信息实现上直接使用pdm时,我们需 ...
-
c#自定义ORM框架---(泛型&;反射&;实体类扩展属性<;附带通用增、删、查、改>;)
该教材主要是运用到泛型.反射和实体类扩展属性 步骤一.建立扩展属性类 实体类扩展属性要继承Attribute基类完成 [AttributeUsage(AttributeTargets.Property ...
-
iOS的扩展类,扩展属性
Objective-C有两个扩展机制:Associative和Category.Category用来扩展类方法,Associative用于扩展属性.Associative机制的原理是把两个对象关联起来 ...
-
Kotlin入门(33)运用扩展属性
进行App开发的时候,使用震动器要在AndroidManifest.xml中加上如下权限: <!-- 震动 --> <uses-permission android:name=&qu ...
-
[NewLife.XCode]扩展属性(替代多表关联Join提升性能)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...
-
Flutter 自定义绘制 View
在 Flutter 中自定义 View 有两种方式: 组合已有控件 自定义绘制 如何自定义绘制 有两个类做这件事情: CustomPaint :会在绘制阶段提供一个 Canvas 画布 CustomP ...
-
SQL SERVER中的扩展属性
以前在SQL SERVER建表时,总看到扩展属性,但一直未使用过.今天研究下: 增加扩展属性: 语法: sp_addextendedproperty [ @name = ] { 'property_n ...
-
【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样
申明: - 本文适用于WinForm开发 - 文中的“控件”一词是广义上的说法,泛指包括ToolStripItem.MenuItem在内单个界面元素,并不特指继承自Control类的狭义控件 用过To ...
-
ADO.Net(四)——扩展属性和配置文件应用
一.扩展属性 处理:有外键关系时将代号化信息处理成原始文字,让用户可看懂的(粗略解释) 利用扩展属性 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展 ...
随机推荐
-
wxWidgets编译安装gtk问题的解决办法
下面是google到的一篇博文.我在centos5.3中想安装amule,结果编译时,提示没找到wxWidgets退出了.只好又去下了wxWidgets,还是源码,需要编译.编译中出现和下面这位网友一 ...
-
CSS的盒子模型
1.边框:包裹内容的容器 统一设置:border: border-width border-style border-color 上:border-top 下:border-bottom 左:bord ...
-
React Native Android增加本地图片
将图片文件 UePbdph.png 放入与index.android.js的同目录中,在index.android.js中引入: <Image source={require('./UePbdp ...
-
Struts2类型转换器
概述 A .从一个HTML 表单到一个 Action 对象,类型转换是从字符串到非字符串. –HTTP没有"类型" 的概念.每一项表单输入只可能是一个字符串或一个字符串数组. ...
-
zzuli 1812: sort 排序
1812: sort Time Limit: 1 Sec Memory Limit: 128 MB Submit: 352 Solved: 216 SubmitStatusWeb Board De ...
-
vue中的路由
路由配置项: import Router from ‘vue-router’ 1.path:路径 ...
-
mysql函数之SUBSTRING_INDEX(str,";/";,-1)
SUBSTRING_INDEX的用法: •SUBSTRING_INDEX(str,delim,count) 在定界符 delim 以及count 出现前,从字符串str返回自字符串.若count为正值 ...
-
Mysql查询出所有列名
select group_concat(COLUMN_NAME Separator ',') as COLUMN_NAME from information_schema.COLUMNS where ...
-
python摸爬滚打之day02----while循环,运算符,格式化输出
1.while循环 1.1 结构:while +条件判断: while 循环体 else: 条件不成立时语句块 while...else...是一个循环整体,当循环条件成立时执行while循环体内容 ...
-
Axiom3D:数据绑定基本流程
在前面我们学习OpenGL时,不管绘制如球,立方体,平面,地面,动画模型中最常用的几个操作有创建缓冲区,写入缓冲区.在Axiom中,相关的操作被整合与组织到VertexData,IndexData中, ...