Unity3D热更新全书-脚本(一) 初识脚本
开篇之前还是要先说明,这是一份给经验并不丰富的程序员阅读的文字。
有需求、有疑惑,往下看。
第一个问题什么是脚本?程序和脚本如何区分?我们给Unity编写的组件是程序还是脚本?
这些问题本文无意去解答,因为其中混合着太多有立场的东西,站在不同的立场会有不同的看法,这其中的矛盾不是简单可以调和的。
只要提出一个观点,就很容易陷入语言大战的泥潭。
我们不妨从另一个角度来思考,为什么要分程序和脚本,是为了找一条分界线。
这条分界线叫做灵活。
我们这个专题的出发点是探讨Unity3D客户端资源更新,已这个出发点划条线,不灵活的站左边,灵活的站右边。
试思考如下情景
一个玩家,初始HP200,初始MP200
我们采用两个方案来完成
左边 | 右边 |
组件里直接写代码 Player.HP=200; Player.MP=200; | 写一个配置文件Player.InI HP=200 MP=200 组件里写代码 Player.HP = GetInIValue(“HP”); Player.MP=GetInIValue(“MP”); |
当策划(万恶的策划,本篇的主要反面人物)说哎呀,不行,玩家的初始HP要改成500。
从我们的出发点来衡量:
左边,灾难,玩家要再经历一次下载安装客户端的煎熬。
右边,只要让Player.InI更新到客户端,这就可以在玩家重启客户端的时候完成。
左边,不符合资源更新的精神。
右边,符合。
此时我们就认为右边的Player.Ini是一种脚本,我们所称的脚本就是可以让逻辑发生变化的东西。
这时候有一些经验的人可能会站出来反对:那是配置文件,算什么脚本,脚本要逻辑的。
反对有效,让我们更进一步
Player.InI
HP = (today==Monday)?100:200
MP =(today==Sunday)?400:200
如此,你还会认为配置文件和脚本是完全不相干的东西么?
如果你对三目运算符不是那么熟悉,可以看看展开的写法
if(today==Monday)HP=100
else HP=200;
if(today==Sunday)MP=400
else MP=200;
通过这个代码可以看出策划如此做的用意:我们的主人公有周一恐惧症,周一HP减半,周日太High,估计是个码农,周六加了一天班,周日开心的MP翻倍。
只要我们假定策划的这种点子根本停不下来,隔三差五就要改一次。
你是不是会产生一种强烈的冲动:恨不得把所有代码写在配置文件的字符串里。
这就是脚本,写在字符串里的代码。只因为字符串够灵活。
执行字符串里的代码,有个叫法,叫做Eval。
我们将在下一篇来点实例。
顺便一提C#也被一部分人认为是写在字符串里的代码,这就是一种立场。不要做互斥立场的争论,那毫无意义,只有当我们立场一致,争论才能带来思维的碰撞。
【推荐】国内首个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的设计模式综述