Unity Editor 基础篇(六):Property Drawers

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

本案例中楼主似乎把person拼错了,类名不用多管,看内涵。


###Property Drawers:绘制属性
目标:
1.了解一些属性的使用
2.自定义一个Property Drawers

最终效果:

这里写图片描述


准备:
创建一个新的工程或者用上一篇的工程,然后C#脚本:
Scripts:
Persion.cs :人物信息类(序列化)
ShowPersionInfo.cs 调用人物信息类创建对象的地方
Editor:
PersionPropertiesDrawer.cs:绘制人物信息类属性显示

代码:
Persion类:

这里写图片描述

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2XYRlrz4-1653062334964)(https://img-blog.csdn.net/20170326142546565?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzMzMzc4MTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]

为什么要这样呢?相信大伙们都知道,要想给一个游戏对象挂上脚本,那么该脚本就必须继承自 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中,看看我们的效果实现了没:

这里写图片描述

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


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

### 如何使用 Keil5 Hex 文件 对于仅拥有已编译好的 hex 文件而无源文件的情况,在 Keil V5 平台上直接hex 文件至单片机(如华大单片机)需采取特定的方法,因为直接调用该平台进行此类操作不可行[^1]。 #### 设置 Output 路径 进入 Keil 的 output 设置界面,指定要录的 hex 文件的具体位置。确保在路径输入框中填完整的 hex 文件名称并附带 `.hex` 扩展名;缺少此扩展名可能导致系统继续尝试录先前编译的结果而非所选的 hex 文件[^3]。 #### 配置 Flash 工具选项 针对不同类型的微控制器(MCU),可能还需调整 flash 下载工具的相关配置参数以匹配目标设备的要求。这一步骤通常涉及选择合适的编程算法以及设定通信接口等细节[^2]。 #### 启动下载过程 完成上述准备工作之后,可以通过点击调试窗口内的 “Download” 或者快捷菜单里的相应命令来启动实际的程序入流程。如果一切顺利的话,软件会自动连接硬件并将选定的 hex 数据传输到 MCU 中存储起来[^4]。 ```python # Python 示例代码用于说明自动化脚本概念 (并非真实实现) def download_hex_to_mcu(hex_file_path, mcu_type): """ 自定义函数模拟将 HEX 文件下载到指定型号的 MCU 上 参数: hex_file_path -- 完整路径字符串指向待上传的 .hex 文件 mcu_type -- 字符串表示的目标单片机类型标识符 返回值: 成功则返回 True ,失败抛出异常信息 """ try: configure_output_settings(hex_file_path) # 设定输出设置 select_flash_tool(mcu_type) # 挑选适合的闪存工具 execute_download_command() # 发送下载指令 return True # 表明成功结束 except Exception as e: raise RuntimeError(f"Failed to upload {hex_file_path}: {e}") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值