Unity Editor 基础篇(八):Decorator Drawers

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

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


Unity Editor 基础篇(八):Decorator Drawers


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


Unity Editor 基础篇(八):Decorator Drawers



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


Unity Editor 基础篇(八):Decorator Drawers


这段代码很简单,就是让我们的“DrawerImageAttribute”类继承自“PropertyAttribute”类,上一篇已经讲过,不了解的同学可以去看《Unity Editor 基础篇(七):Property Attributes》


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


Unity Editor 基础篇(八):Decorator Drawers


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


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


Unity Editor 基础篇(八):Decorator Drawers


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


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


Unity Editor 基础篇(八):Decorator Drawers


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


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


Unity Editor 基础篇(八):Decorator Drawers



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


Unity Editor 基础篇(八):Decorator Drawers


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


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


Unity Editor 基础篇(八):Decorator Drawers


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


Unity Editor 基础篇(八):Decorator Drawers


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


Unity Editor 基础篇(八):Decorator Drawers


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


Unity Editor 基础篇(八):Decorator Drawers


这,,,克森你坑我?不急不急,克森是故意这么做的,错误见多了那就不是错误了。


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


Unity Editor 基础篇(八):Decorator Drawers


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


Unity Editor 基础篇(八):Decorator Drawers


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


Unity Editor 基础篇(八):Decorator Drawers


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


Unity Editor 基础篇(八):Decorator Drawers


Perfect,漂亮的完成了。