Monotable 一个轻量Unity插件;按规则自动收集Gameobject下MonoScripts

在我之前待过的项目组,好几个都有自动收集ui自动生成的功能,用久了自己写demo的时候没有这种功能就很难受,就自己封装了一个

想法

1.在lua环境中查找ui组件需要频繁的find就会有性能问题,如果我们将所有的组件打包一起发送给lua就只会产生一次lua cal lc#。

2.如果ui频繁变动的情况下,替换一次ui,ui结构有可能会大改 改完之后需要对照前后的改变去改代码,非常麻烦。如果我们让一个mono去收集下面的一些ui组件,并将引用保存起来。那么结构的变动就影响不到我们的代码,因为代码直接引用组件,只要某个组件的功能不变则代码不需要变动,比如一个text是用来显示英雄名字,因为ui的变动,ui的结构发生变化,但text的功能没有变化,依旧还是显示英雄名字那么我们就完全不需要改变代码。

拆解

为了实现上诉想法,我们需要有

1.组件过滤,只加入我们感兴趣的组件而非所有组件

2.editor扩展,unity不支持显示dic,编写扩展以显示key值对应的ganeobject,以及dic的序列化。

3.有了go的dic就可以根据key自动生成对应的字段。所以是完全可以做一个自动生成代码的功能。

实现

第一个问题非常好解决 我们子需要规定以某种字符串开头的gameobject就会被收集进去,比如 @text__name ,就对应字段 Text name,@表示需要被收集,text表示收集的组件引用,name表示dic中的key。

第二个问题 用odin或是重写一下oninspectorgui解决unity不支持显示dic的问题。unity也不支持dic的序列化和反序列化,也就是存储。所以需要实现ISerializationCallbackReceiver接口,序列化时以两个list存储,运行时采用dic,加载或存储时

转换一下就ok。

第三个问题,生成代码。在第一步中根据规则我们已经获取到了go ,字段名 以及组件类型,直接生成就行;添加两个字段用于自定义生成脚本类名,命名空间,解决命名冲突;还需要在生成类中存储对应的对象的资源路径和层级路径用于防止错误的配置导致类名命名空间重复时弹出报错;使用parital关键字修饰生成类,让我们可以对该类写一些代码。

github代码仓库

相关推荐
KhalilRuan8 小时前
Unity性能优化
unity·性能优化·游戏引擎
ellis19708 小时前
u3d IMGUI[二] 编辑器扩展
unity
五仁烧饼20 小时前
Unity性能优化系列内存篇 - 移动端内存优化
unity·性能优化·游戏引擎
WiChP2 天前
【V0.1B15】从零开始的2D游戏引擎开发之路
游戏引擎
zhchyun20084 天前
# 【Unity UI 进阶】仿 Element UI 打造企业级 Unity UI 组件库(06)
ui·unity·游戏引擎
Behaviour4 天前
Unity游戏HybridCLR 热更新接入实战
游戏·unity·游戏引擎
LONGZETECH4 天前
新能源汽车动力电池实训教学痛点与虚拟仿真技术解决方案
c语言·3d·unity·架构·汽车·汽车教学软件
王维志5 天前
UiSplineRenderer
unity·游戏引擎
k4m7v2pz5 天前
Godot 4 仿 agar.io:相机缩放被 max_zoom 卡死,窗口越大球越小的根因与修复
游戏引擎·godot·相机·缩放·clamp·camera2d
FairGuard手游加固5 天前
iOS 游戏加固技术解析:代码混淆、资源加密、内存保护与重签名检测
安全·游戏·macos·unity·ios·objective-c