赞
踩
本文参自:http://mp.weixin.qq.com/s/kjoS2DaAADBUPMg1kHwnSg
本文为本人学习上连接的笔记有改动,请点击以上链接查看原文,尊重楼主知识产权。
目标:
1.了解一些基本的使用
2.自定义一个Property Attributes
最终效果:
准备:
大伙们还记得《Unity Editor 基础篇(一):Build-In Attribute》里所说的东西吗?如下图所示:
这篇文章讲解自定义一个这样的属性:
创建一个新的工程或者用上一篇的工程都可以,然后在创建C#脚本:
Scripts文件夹:
ReadOnlyAttribute.cs 自定义的属性类(继承PropertyAttribute)
Test.cs:测试使用自定义了的属性的类
Editor文件夹:
ReadOnlyAttributeDrawer.cs自定义的属性的绘制类
(继承PropertyDrawer)
代码:
首先,打开我们得“ReadOnlyAttribute.cs”脚本,为其添加如下代码:
这段代码很简单,就是让我们的“ReadOnlyAttribute”类继承自“PropertyAttribute”类,该类的解释如下图所示:
所以呢,由上图便能知道我们接下来要做的事情了吧,那就是让我们的“ReadOnlyAttributeDrawer”类继承自PropertyDrawer类,然后重写OnGUI和GetPropertyHeight方法,如下图所示:
上图的代码在上一篇都有讲解过,因此这里不再做过多的赘述。
好的,接下来继续为我们的“ReadOnlyAttributeDrawer.cs”的OnGUI方法添加如下代码:
在上面的代码中,我们使用到了一个名为“SerializedPropertyType”的枚举,它存放的是序列化属性的类型,它包含的类型很多,但是在该篇文章中我们只使用到了这几个,感兴趣的同学看可以去尝试其它类型。
我们使用该枚举为value获取相对应类型的值,然后使用一个Label在Inspector面板中绘制出来(\t为制表符同Tap键,为了美化显示)。
好了,接下来打开我们的“Test.cs”脚本,添加如下代码:
现在,让我们回到Unity中查看一下效果:
这个。。。是不是很简单呀。
接下来让我们制作一个带有参数的。
让我们打开我们的“ReadOnlyAttribute.cs”,添加如下代码:
再让我们为“ReadOnlyAttributeDrawer.cs”的OnGUI函数添加如下方法:
上面的代码相信大伙们都能看懂,唯一有点迷惑的可能就是attribute 属性了,其实它就是我们通过 [CustomPropertyDrawer(typeof(ReadOnlyAttribute))] 传过来的ReadOnlyAttribute类,(写成this.attribute可以好理解点)
因此楼主Debug了它的类型名字,接下来让我们看看打印出来的信息:
好的,就是我们的 ReadOnlyAttribute 类。
对了楼主打印了 myAttribute.textColor 的值,是为了测试值是否正确的传入。
好了,接下来开始测试,让我们为我们的“Test.cs”脚本添加如下代码:
从上图可知,其实[ReadOnlyAttribute(参数)] 传入的参数对应的就是我们ReadOnlyAttribute类的构造函数需要传入的参数。
好了,接下来让我们回到Unity中查看一下效果:
本人的效果:
颜色和alaph设置都正常;
但是切换到个人版unity白底就跟下面楼主的类似了都是黑字,alaph正常,颜色不对。
原著楼主的效果:
好了,大伙们可以看到,值已经完美的传入了,效果并不是完美期望的那样。但是我们的 My Int 的 Apha 值起作用了。
楼主对于这个Bug弄了一个晚上,最后发现原来是Unity5.x出的BUG,总之楼主今晚把Unity5.x版本都试得差不多了,还是一个鸟样,最后Unity4.6版本妥妥得实现了我们想要得效果,下面有两张图,一张是楼主试过得版本,一张是Unity4.6实现得效果图:
不知道大伙们的Unity5.x能否实现,其实楼主只是想用这个案例告诉大伙们 [xxxx(参数)] 里的参数是这样弄的,仅此而已哟。
文末:再次声明请尊重楼主版权:
http://mp.weixin.qq.com/s/kjoS2DaAADBUPMg1kHwnSg
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。