当前位置: 首页 > news >正文

手游为什么要热更新,C#为什么不能热更新,LUA为什么可以

热更新是什么?简单的说就是打补丁,只补需要部分,不用重个游戏包重打上传

热更新问题的本质是代码更新而不是资源更新,为什么呢?

大型手游都是将补丁资源放在专门的WEB服务器上,游戏启动时动态下载并放入到游戏的持久化目录中,这对安卓和苹果都可以

但是代码就特殊了:

1,由于不同类型的语言有不同的运行机制,编译型语言如C#,是先编译成一整块中间码然后在不同平台上被.NET运行时解释执行,这就是说使用C#编写的APK或IPA安装到手机上后是没有任何C#文件的。这样就算运行时将作为补丁的C#文件从WEB服务器上下载到持久化目录也运行不了。但有个办法是反射,见后而。

一,手游戏 为什么需要热更新?

1,手游是快节奏的应用,功能和资源更新频繁,特别是重度手游安装包常常接近1个G,如果不热更新,哪怕改动一行代码也要重新打个包上传到网上让玩家下载。

2,对于IOS版本的手游包IPA,要上传到苹果商店进行审核,周期漫长,这对于BUG修复类操作是个灾难。

基于以上两点,热更新就很重要了,快速,小巧,路过苹果审核。

二,C#为什么不能热更新

准确的说,C#在安卓上可以实现热更新,但在苹果上却不能。

在安卓上可以通过C#的语言特性-反射机制实现动态代码加载从而实现热更新。

具体做法是:将需要频繁更改的逻辑部分独立出来做成DLL,在主模块调用这些DLL,主模块代码是不修改的,只有作为业务(逻辑)模块的DLL部分需要修改。游戏运行时通过反射机制加载这些DLL就实现了热更新。

但苹果对反射机制有限制,不能实现这样的热更。为什么限制反射机制?安全起见,不能给程序太强的能力,因为反制机制实在太过强大,会给系统带来安全隐患。

三,LUA为什么可以热更

LUA解释型语言,并不需要事先编译成块,而是运行时动态解释执行的。那C#为什么不做成解释型语言呢?因为C#的定位是一个追求效率且功能强大的编译型语言。这样LUA就和普通的游戏资源如图片,文本没有区别,因此可以在运行时直接从WEB服务器上下载到持久化目录并被其它LUA文件调用。

转载于:https://www.cnblogs.com/timeObjserver/p/8647383.html

相关文章:

  • HDU 1232:畅通工程(并查集模板)
  • input按回车键,响应相关事件
  • 前端面试题:JS中的let和var的区别
  • CentOS 安装ActiveMQ
  • hdu1009 FatMouse' Trade---贪心
  • android-------Java 常问的基础面试题
  • 网络爬虫练习
  • [离散时间信号处理学习笔记] 15. 模拟信号的数字处理
  • Python进阶细节
  • php rsa加密解密实例
  • BZOJ2599:[IOI2011]Race(点分治)
  • 泛型就这么简单
  • React Native模块加载与原理分析
  • Git 与each
  • .Net Core和.Net Standard直观理解
  • AHK 中 = 和 == 等比较运算符的用法
  • CSS盒模型深入
  • CSS实用技巧
  • Docker 笔记(2):Dockerfile
  • ES6 ...操作符
  • in typeof instanceof ===这些运算符有什么作用
  • Java IO学习笔记一
  • Java|序列化异常StreamCorruptedException的解决方法
  • Linux中的硬链接与软链接
  • Octave 入门
  • Python_OOP
  • Rancher如何对接Ceph-RBD块存储
  • redis学习笔记(三):列表、集合、有序集合
  • SegmentFault 2015 Top Rank
  • Vue ES6 Jade Scss Webpack Gulp
  • Webpack 4x 之路 ( 四 )
  • 力扣(LeetCode)965
  • 面试遇到的一些题
  • 听说你叫Java(二)–Servlet请求
  • 无服务器化是企业 IT 架构的未来吗?
  • 以太坊客户端Geth命令参数详解
  • 异步
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ${ }的特别功能
  • (1)虚拟机的安装与使用,linux系统安装
  • (12)目标检测_SSD基于pytorch搭建代码
  • (20050108)又读《平凡的世界》
  • (python)数据结构---字典
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)SpringBoot3---尚硅谷总结
  • (一)插入排序
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转) ns2/nam与nam实现相关的文件
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net6 Api Swagger配置