博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手游为什么要热更新,C#为什么不能热更新,LUA为什么可以
阅读量:5928 次
发布时间:2019-06-19

本文共 914 字,大约阅读时间需要 3 分钟。

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

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

大型手游都是将补丁资源放在专门的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

你可能感兴趣的文章
适配器模式和装饰模式
查看>>
python exception的传递
查看>>
[SDOI2009]Bill的挑战——全网唯一 一篇容斥题解
查看>>
Python logging模块详解
查看>>
linux 3
查看>>
技术成长的困扰
查看>>
java如何进行字符串拼接?
查看>>
python之新式类与经典类
查看>>
最大连续子数组和与JUnit测试
查看>>
自动布局
查看>>
ajax返回数据类型为JSON数据的处理
查看>>
英文词频统计预备,组合数据类型练习
查看>>
Tips
查看>>
ROS
查看>>
Hibernate入门
查看>>
Centos7作为VNCserver,本地使用VNCViewer连接
查看>>
敏捷开发
查看>>
函数体中的全局变量与局部变量
查看>>
java线程安全问题原因及解决办法
查看>>
[转]经典SQL语句大全
查看>>