码迷,mamicode.com
首页 > 编程语言 > 详细

【小松教你手游开发】【unity系统模块开发】热更

时间:2018-03-11 00:12:26      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:   手游开发   

现在的手游项目如果没个热更新迭代根本跟不上, 特别是像我们项目做mmo的更是需要经常改动代码。

而现在的项目一般会选择用lua的方式实现热更新

不过我们项目由于历史原因没有使用,用的是另外一种方案

在项目里的所有GameObject都不挂脚本(NGUI脚本就通过代码的方式挂上),自己写的脚本都不继承Mono并打成dll,然后通过一个启动脚本去打开这些dll。

不过这样就有个问题,ios不能热更。。。

不管怎么样,先来讲讲这种方案要怎么做。

首先有两部分,一部分是打包,一部分是解包。

而包又分为资源包和代码包。

先讲打包

1.资源打包在之前写的另一篇文章有写到

http://blog.csdn.net/chrisfxs/article/details/55046339

2.代码打包

这个在之前也有说到

http://blog.csdn.net/chrisfxs/article/details/53213640

主要就是把代码全部打成dll,用TextAsset类型打开再打成assetBundle

然后是解包

1.资源解包

资源解包之前也是有讲

http://blog.csdn.net/chrisfxs/article/details/55046339

上面其实都有讲,其实主要就是想讲代码解包

2.代码解包

首先需要有一个脚本LoadingScript作为整个项目的初始化入口

在这个脚本的Awake里面去做各种配置,比如根据不同的平台获取不同的文件路径,播放cg、闪屏等

在Start函数里去设标志位开始初始化

在Update里开始按各种状态开始工作

1.下载脚本的AssetBundle

2.反射

TextAsset asset = www.assetBundle.LoadAsset<TextAsset>(fileName);  
Assembly assembly = Assembly.Load(asset.bytes);  

3.获取脚本,创建主Mono,也就是游戏主逻辑入口,并挂在gameObject(这里我们是ClientMain)

Type script = assembly.GetType(scriptName);//这个是脚本名字,这里是ClientMain  
gameObject.AddComponent(script);  

4.如果还有其他需要挂上的脚本就同样用这个方式挂上
接着所有逻辑就在ClientMain脚本的Start中展开。

【小松教你手游开发】【unity系统模块开发】热更

标签:   手游开发   

原文地址:http://blog.51cto.com/13638120/2084956

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!