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

第九天见

相关推荐
monstercl1 小时前
游戏资源传输服务器
运维·服务器·游戏
狐凄4 小时前
Python实例题:pygame开发打飞机游戏
python·游戏·pygame
Tech Synapse1 天前
Unity ML-Agents实战指南:构建多技能游戏AI训练系统
人工智能·游戏·unity
浮云中的神马-潘帅3 天前
一款独立于游戏外的键盘源按键辅助工具他来了
游戏·计算机外设
2301_780789663 天前
高防ip是怎么做到分布式防御的
分布式·网络协议·tcp/ip·游戏·ddos·高防ip·高防cdn
二狗哈3 天前
制作一款打飞机游戏39:鼠标控制
游戏·计算机外设
windwind20003 天前
发行基础:本地化BUG导致审核失败
游戏·青少年编程·编辑器·bug·创业创新·玩游戏
wgc2k3 天前
Java游戏服务器开发流水账(4)游戏的数据持久化
java·服务器·游戏
IP管家4 天前
多级路由器如何避免IP冲突
网络·网络协议·tcp/ip·游戏·智能路由器·ip
Sui_Network4 天前
Sui Basecamp 2025 全栈出击
大数据·游戏·web3·去中心化·区块链