FPS游戏框架漫谈第八天

话说当我们上架一款游戏,无论游戏内容的多和少,游戏是人开发的,那么就可能存在bug,从而引发玩家逃离,那么作为游戏的技术负责人需要为这些潜在的风险提供什么避险神器呢??????

这就引出了我们今天要谈论的话题热更新, 热更新技术是什么呢?

一个热字就知道,我们的游戏肯定一直在运行中的,外网玩家是随时可以进行注册和登录并且进行游戏体验,那么这个功能就要求我们不能关闭游戏服务器进行重启来更新游戏逻辑,甚至是下架外网上架各种渠道的游戏安装包,然后进行上架进行内容更新的甚至是bug的修复,这个方式是比较传统的 可以叫冷更新?????????????????

既然提到热更新,那么比较传统的热更方式对于编译型语言是DLL动态库的形式进行代码逻辑热更,

针对解释型语言就简单了配置unity引擎自带的AssetBundle的方式以资源包的方式进行远程下载,替换本地文本的方式直接完成了热更。

那么我们的项目c#语言能不能采用dll动态库的方式进行热更呢,就现有状态安卓平台没有新增限制,苹果平台考虑到软件风险直接不支持dll方式进行热更??????

那么问题来了,苹果是如何干预了原有的dll热更呢????????????????????????

首先我们要知道dll是怎么实现了热更,说白了就是我们可以直接通过dll中的信息动态创建代码逻辑,然后在交给编译器进行编译成中间语言,中间语言在翻译成字节码,拿到字节码交给机器,机器就认识了。

然后苹果干了一件什么事,让这个流程中断了呢。首先是苹果直接在操作系统的层面上改变了上面的这个流程,定义了所谓的Full AOT模式,这个模式不像安卓平台是支持JIT也就是边编译边执行,那么需要什么逻辑去支持Full AOT模式呢,很简单直接丢掉翻译这步,如果遇到我们采用的dll动态库创建出来的原始代码,是不会给你有编译机会的,那么就这个时候你并不是中间语言,直接丢给虚拟机是不认识的,这个虚拟机的功能是拿到中间语言转换成字节码。那么结果是什么,把他当成字节码去解读,肯定是找不到中间语言定义的语法的,直接会报错找不到啥啥啥?????????????????????????

这个时候我们怎么办,放弃ios平台的bug修复了吗,不???? 我们公司的技术负责人是1000万个不服的。我想想既然直接是拿到中间语言转换字节码 ,那么我如果将我们新增了代码或者修复了bug的原始工程直接进行编译,编译之后我们是可以拿到一个中间语言版本 对应我们C#工程来说其实就是Mono.Cecil库。那么我们直接把这个库进行替换,那么这个库编译成字节码之后是不是我们新加的内容是不是已经进去了呢??????????? 想了下还是真是,但是有人会疑问外网的c#代码是不是没有新增吗。我想说我们的操作系统跑的不是c#原始代码 而是最终的010101011010101001机器码,所以我们要做的事就是Xlua做的事,据说这个插件还不错,腾讯开源,啊哈哈

第九天见

相关推荐
yjcode7895 小时前
探索游戏充值新纪元:友价源码技术革新之旅
大数据·人工智能·游戏·游戏交易
aaaffaewrerewrwer7 小时前
一个真正可玩、可分享、可自定义的在线单词搜索游戏网站(Word Search Puzzles)
游戏·word
wjql212 小时前
少女前线蓝蝶契约体力恢复时间 少女前线蓝蝶契约体力怎么恢复
游戏
wjql214 小时前
高能探宝团零氪阵容推荐 高能探宝团零氪阵容怎么搭配
游戏
寰宇的行者14 小时前
我用Hermes Agent一个月:自动写文章、管股票、看游戏截图,成本账一次算清
游戏
sensen_kiss14 小时前
CPT306 Principles of Computer Games Design 电脑游戏设计原理 Pt.8 Game AI(游戏里的“人工智能系统”)
人工智能·游戏
unityのkiven15 小时前
工作分享1(26.5.27):基于栈实现全局返回逻辑通用架构设计(适配异步 + 确认弹窗)
游戏·unity·c#·客户端架构
上海云盾第一敬业销售16 小时前
游戏盾架构解析:保障在线游戏的安全
安全·游戏·架构
wgc2k16 小时前
Oops Framework-1-学习路线(Cocos Creator + ECS)
游戏·cocos2d
wgc2k20 小时前
Node.js游戏服务器项目移植 3-手撸简单的内存泄露监控
服务器·游戏·node.js