Unity Editor 基础篇(六):Property Drawers自定义属性绘图

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

本篇文章会给大家介绍下Property Drawers自定义属性绘图,创建一个新的工程或者用上一篇的工程都可以,然后在Scripts文件夹中创建两个C#脚本,分别命名为:“Persion.cs”和“ShowPersionInfo.cs”,如下图所示:



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






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



这段代码不用解释了吧,就是一个普通得类和枚举。接下来为我们的“ShowPersionInfo.cs”脚本添加如下代码:



为什么要这样呢?相信大伙们都知道,要想给一个游戏对象挂上脚本,那么该脚本就必须继承自 MonoBehaviour 。大伙们可以将“Persion.cs”挂到游戏对象上,便会出现如下图所示:



所以“ShowPersionInfo.cs”仅仅就是一个辅助类,作用就是将我们的“Persion.cs”能挂到游戏对象上。


好了,接下来让我们创建一个空的游戏对象,并且命名为“Persion”,然后为其添加“ShowPersionInfo.cs”脚本:



咦,克森,你坑我?这什么都没有啊!!原来,我们漏掉了一段代码,接下来让我们为其补上:



原来呀,要想将一个普通的类里的属性在Inspector面板中显示出来,那么必须将这个普通的类序列化。


好了,让我们回到 Unity 中,看看发生了什么变化。



Perfect!Persion类中的属性成功的显示在了Inspector面板上。


好,让我们简单的了解一下,什么是序列化,如下图所示:


(图片来源于百度百科)


简单的理解就是,序列化类的时候是从属性读取值以某种格式保存下来,将其传输到另一个地方去。那么呢,这个过程是交给Unity引擎来实现的,简单的了解就行了(也就是会用就行了)。


接下来就是本篇教程的核心了!!!


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



让我们的“PersionPropertiesDrawer.cs”继承自PropertyDrawer类,然后重写 OnGUI 和 GetProperties 函数。


添加 [CustomPropertyDrawer(typeof(Persion))],指定该类是用于自定义属性的绘制。


接下来让我们来测试一下这些方法传入的参数都是做什么的,为我们的脚本添加如下代码:



好,现在回到Unity看看测试的数据:



从上面的数据可以看出如下几点:

    1.OnGUI 和 GetPropertyHeight 里的 property 参数是同一个参数。该参数里存放的是 Persion 里的属性信息。


    2..OnGUI 和 GetPropertyHeight 里的 Label 参数也是同一个参数,该参数里存放的是 Persion 类的类名。


    3.position参数指的是需要在Inspector面板中绘制的区域信息,可以从下面两张图中简单的了解一下:

    



PS:为了测试,克森注释了一些代码,并且添加了一个2D刚体组件。


对了还有一个地方克森遗漏掉了,那就是在Inspector面板中的一行高度为 16 。我们可以从下图中得知。



好了,接下来就让我们来绘制我们Persion的属性吧。我们的目标如下图所示:


    

下面看一看我们的分析图:



好了,接下来就开始码我们的代码,打开“PersionPropertiesDrawer.cs”,为其添加如下代码:



上面的代码呢,克森都有分析过了。也许会有一些小伙伴在两个地方上头晕,也就是【获取对应的序列化属性】和【绘制属性】这两个地方上弄不明白。其实很简单,从下面两张图中便可理解:



好了,让我们回到Unity中,看看我们的效果实现了没:



好的,非常完美的实现了。

猜你喜欢

转载自blog.csdn.net/YongshuangZhao/article/details/80224937