Unity Editor 基础篇(八):Decorator Drawers

来源:互联网 发布:linux 系统版本 编辑:程序博客网 时间:2024/05/16 19:45

本文参自:http://mp.weixin.qq.com/s/mSImXYjIeU4LClwcbJ9Crw
本文为本人学习上连接的笔记有改动,请点击以上链接查看原文,尊重楼主知识产权。


Decorator Drawers自定义装饰

目标:

1.了解一些基本的使用
2.自定义一个Decorator Drawers

最终效果:

这里写图片描述

准备:
创建一个新的工程或者用上一篇的工程都可以(楼主用的是原来的工程,因为这一篇的内容和上一篇的内容很类似)
然后创建C#脚本:

Scripts文件夹:
DrawerImageAttribute.cs
Test.cs

Editor文件夹:
DrawerImageAttributeDrawer.cs

代码:

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

这里写图片描述

这段代码很简单,就是让我们的“DrawerImageAttribute”类继承自“PropertyAttribute”类,上一篇已经讲过。

接下来,打开我们的“DrawerImageAttributeDrawer.cs”脚本,为其添加如下脚本:

这里写图片描述

上图的代码除了红色框框里的东西,其它的在上一篇都有讲解过,因此这里不再做过多的赘述。

好了,让我们来分析分析 DecoratorDrawer 类是个什么东西,首先从字面上的意思就是:装饰绘制者。意味着它是用于装饰的。接下来让我们看看它的源码:

这里写图片描述

从源码中我们知道,它其实和上一篇的PropertyDrawer类差不多,都是继承自 GUIDrawer。只不过他的 OnGUI 方法的参数比 PropertyDrawer 的 OnGUI 方法的参数好了两个,仅此而已。

接下来让我们为“DrawerImageAttributeDrawer.cs”添加如下代码:

这里写图片描述

上面的代码应该不难理解吧,就是判断图片是否存在,如果不存在就去Resources文件夹里读取对应的图片,然后调用 GUI.DrawTexture(position, image); 在Inspector面板中绘制该图片。

因此,接下来的操作相信大伙们都知道了吧。那就是创建Resources文件夹,然后将图片放入该文件夹中,修改相对应的名字,搞定!

这里写图片描述

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

这里写图片描述

咦,怎么回事儿,怎么那么难看?看到这里,相信看过上一篇文教的伙计们应该知道怎么做了吧?那就是修改我们 GetHeight() 方法的返回值就行了呀。

让我们回到我们的“DrawerImageAttribute.cs”脚本中,为其添加如下代码:

这里写图片描述

接着回到“DrawerImageAttributeDrawer.cs”中,添加如下代码:

这里写图片描述

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

这里写图片描述

现在,让我们回到Unity中查看一下效果:
这里写图片描述

是的,楼主在坑我们。不急不急,楼主是故意这么做的,错误见多了那就不是错误了。

好,让我们来解决这个错误。接下来为我们的“DrawerImageAttributeDrawer.cs”脚本添加如下代码:

这里写图片描述

然后回到Unity中,看看测试的数据,分析出错原因:

这里写图片描述

从上图中,我们可以看出,该脚本先调用的是 GetHeight() 方法,因此当我们在 GetHeight() 方法中使用 _attribute.height 的时候便会报空指针的错误,因为此时的 _attribute 还没有初始化,因此让我们添加如下代码:

这里写图片描述

好了,接下来回到Unity中查看效果:

这里写图片描述

Perfect,漂亮的完成了。


文末:再次声明请尊重楼主版权:
http://mp.weixin.qq.com/s/mSImXYjIeU4LClwcbJ9Crw

0 0