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

第九天见

相关推荐
螺旋天光极锐斩空闪壹式!9 小时前
自制游戏:监狱逃亡
c++·游戏
天晟科技10 小时前
GameFi的前景:游戏与金融的未来交汇点
游戏·金融·区块链
懷淰メ12 小时前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
/**书香门第*/15 小时前
Cocos creator 3.8 支持的动画 7
学习·游戏·游戏引擎·游戏程序·cocos2d
九州ip动态18 小时前
做网络推广及游戏注册为什么要换IP
网络·tcp/ip·游戏
向宇it1 天前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
九州ip动态2 天前
模拟器多开限制ip,如何设置单窗口单ip,每个窗口ip不同
tcp/ip·游戏·媒体
St_Ludwig2 天前
C语言 蓝桥杯某例题解决方案(查找完数)
c语言·c++·后端·算法·游戏·蓝桥杯
qq_428639612 天前
植物明星大乱斗15
c++·算法·游戏
vir022 天前
好奇怪的游戏(BFS)
数据结构·c++·算法·游戏·深度优先·图论·宽度优先