当前位置:   article > 正文

Unity Editor 基础篇(七):Property Attributes_unity propertyattribute 定义了无法使用

unity propertyattribute 定义了无法使用

源地址:http://gad.qq.com/article/detail/33469

大家还记得Unity Editor 基础篇(一):Build-In Attribute(内置属性)里所说的东西吗?如下图所示:



创建一个新的工程或者用上一篇的工程都可以(克森用的是原来的工程),然后在Scripts文件夹中创建两个C#脚本,分别命名为:“ReadOnlyAttribute.cs”和“Test.cs”,如下图所示:



然后在Editor文件夹中创建一个名为“ReadOnlyAttributeDrawer.cs”的脚本,具体如下图所示:






首先,打开我们得“ReadOnlyAttribute.cs”脚本,为其添加如下代码:



这段代码很简单,就是让我们的“ReadOnlyAttribute”类继承自“PropertyAttribute”类,该类的解释如下图所示:



所以呢,由上图便能知道我们接下来要做的事情了吧,那就是让我们的“ReadOnlyAttributeDrawer”类继承自PropertyDrawer类,然后重写OnGUI和GetPropertyHeight方法,如下图所示:



上图的代码在上一篇都有讲解过,因此这里不再做过多的赘述。


好的,接下来继续为我们的“ReadOnlyAttributeDrawer.cs”的OnGUI方法添加如下代码:



在上面的代码中,我们使用到了一个名为“SerializedPropertyType”的枚举,它存放的是序列化属性的类型,它包含的类型很多,但是在该篇文章中我们只使用到了这几个,感兴趣的同学看可以去尝试其它类型。


我们使用该枚举为value获取相对应类型的值,然后使用一个Label在Inspector面板中绘制出来(\t为制表符,为了美化显示)。


好了,接下来打开我们的“Test.cs”脚本,添加如下代码:



现在,让我们回到Unity中查看一下效果:



这个。。。是不是很简单呀。接下来让我们制作一个带有参数的。


让我们打开我们的“ReadOnlyAttribute.cs”,添加如下代码:



再让我们为“ReadOnlyAttributeDrawer.cs”的OnGUI函数添加如下方法:



上面的代码相信大伙们都能看懂,唯一有点迷惑的可能就是 attribute 属性了,其实它就是我们通过 [CustomPropertyDrawer(typeof(ReadOnlyAttribute))] 传过来的ReadOnlyAttribute类,因此克森Debug了它的类型名字,接下来让我们看看打印出来的信息:



好的,就是我们的 ReadOnlyAttribute 类。对了克森打印了 myAttribute.textColor 的值,是为了测试值是否正确的传入。


好了,接下来开始测试,让我们为我们的“Test.cs”脚本添加如下代码:



从上图可知,其实[ReadOnly(参数)] 传入的参数对应的就是我们ReadOnlyAttribute类的构造函数需要传入的参数。


好了,接下来让我们回到Unity中查看一下效果:



好了,大伙们可以看到,值已经完美的传入了,效果并不是完美期望的那样。但是我们的 My Int 的 Apha 值起作用了。


克森对于这个Bug弄了一个晚上,最后发现原来是Unity5.x出的BUG,总之克森今晚把Unity5.x版本都试得差不多了,还是一个鸟样,最后Unity4.6版本妥妥得实现了我们想要得效果,下面有两张图,一张是克森试过得版本,一张是Unity4.6实现得效果图:


(试过的版本)


(Unity4.6版本的效果)


不知道大伙们的Unity5.x能否实现,其实克森只是想用这个案例告诉大伙们 [xxxx(参数)] 里的参数是这样弄的,仅此而已哟。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/585584
推荐阅读
相关标签
  

闽ICP备14008679号