Unity 热更新实例一、C#Light 和UI系统使用实例
接下来我会运用热更新的机制,逐步制作一些例子来阐释脚本系统如何和Unity结合。
脚本不限于使用C#Lite,但是C#Lite会有一些便利之处,请往下看。
结合机制也不限于这一种,但是C#Lite的设计比较倾向于,不让脚本管理状态,不让脚本循环执行,每一段脚本就相当于一个函数。
所以C#Lite不会考虑从脚本内定义新的类型和函数这件事,如果要互相调用,可以让脚本内直接调用另一个脚本。
今天带来的是一个脚本系统控制的界面,这个界面完全是用脚本代码产生的,这个界面系统不用脚本也可以使用,大家一看就知道是用OnGUI制作的。
首先是初始化界面
我们通过这样一个函数建立了如上界面,先不用关心界面系统,只是让脚本不用频繁调用,做了一个树结构把界面元素状态起来。
并且指定了按钮一按下时执行脚本 btn01_click.cls脚本,按钮二按下时执行脚本btn02_click.
在Start中调用codeInit 这个界面就出现了
现在还是程序的写法,接下来,见证奇迹的时刻来了。
只要把codeInit函数体内的内容完全复制到脚本文件中,就是脚本了
可以看到在Unity里作为一个TextAsset存在,这就是热更新的本质了,逻辑在资源里,不是在代码里。
C#Lite比别的脚本语言更适合Unity的是,你完全可以把逻辑在程序里写好,再搬运到脚本中,当然目前C#Lite还没做到c#语法100%兼容。
这里有两个问题要检讨一下:
一、我用了一个特别的写法
CLUI_Node_Label label =(CLUI_Node_Label)objlabel;
而没有使用c#中更适合的 as 表达式,就是因为C#Lite并没有支持 as 表达式,只支持了对一个变量进行类型转换。
另外C#Lite的数字识别不能识别0f,只能识别0。
这两处已经加入buglist,积极改进中。
二、C#Lite的错误提示也不是太友好,只有几种很简单的提示,log不详细,不便于识别问题,也在积极改进中。
最终目标是让脚本和代码可以非常轻易的互换,即使出了错,能详细的提示清楚哪里出错,如何改。
好,接下来就让脚本来处理界面,让代码下岗
见证奇迹的时刻
简单,把函数注释掉,直接执行一个脚本来解决问题。
运行场景,得到和代码执行完美一致的效果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述