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做的事,据说这个插件还不错,腾讯开源,啊哈哈

第九天见

相关推荐
bryant_meng2 小时前
【Game】Powerful——Pets(4.3)75~115
游戏·幻唐志·瑶光·赤炎童子·罗刹女
郝学胜-神的一滴4 小时前
C++ Templates 01:拨开迷雾,读懂C++模板经典著作
开发语言·c++·程序人生·游戏·游戏引擎·软件构建
Martina_03216 小时前
AI生成3D场景第一次进入总卡一下?用6步排查Shader编译、纹理上传与预加载
图像处理·人工智能·游戏·3d·ai·自然语言处理·游戏策划
开开心心_Every9 小时前
文件夹批量创建工具支持同级和多层级
运维·服务器·游戏·jupyter·智能手机·pdf·postman
可爱系程序猿17 小时前
键鼠都正常、只有手柄映射才提示 dinput8.dll?DirectInput 接口和游戏目录怎么对齐
程序人生·游戏·电脑
魔士于安1 天前
经典Game
游戏·游戏引擎·贴图·技术美术·模型
tiankongdeyige2 天前
游戏战斗系统学习第2篇:有限状态机 (FSM)
学习·游戏·typescript
剑客的茶馆2 天前
在影视、动画和游戏特效(VFX/Animation Pipeline)行业中Python 调用RV Play
游戏·rv play·rv
郝学胜-神的一滴2 天前
游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱
开发语言·计算机网络·程序人生·游戏·游戏引擎
全速向光3 天前
盖世游戏PC模拟器:手机也能畅玩电脑平台游戏
游戏·智能手机