UnityRuntime总概

2016-10-13  本文已影响354人  Gabo

UnityRuntime概念

目前只研究了Android平台,所以下面讲的都是基于Android平台的
首先说一下UnityRuntime这个概念,几个月前我也才第一次听到这个词的。这个意思是让Unity做出来的应用能同时在一个平台上运行。。就像页游一样,都在浏览器上运行。而UnityRuntime本身也是一个app,起到的作用就类似浏览器,可以加载不同的Unity做出来的app并运行。

目的

当然UnityRuntime并不是单纯的下载Unity导出的apk,再进行加载运行。这里的apk需要先处理,对apk中的资源进行分组打包放服务端供UnityRuntime下载,这样就达到减小首包大小的目的。首包可以加一部分资源,其他资源通过静默下载。还可达到热更新的目的,apk中的dll也属于资源的一部分,可以通过下载更新

难点

CocosRuntime比较容易实现主要是因为,Cocos开源,而且Cocos资源都是原始资源,并且有添加资源搜索路径的接口;而Unity,资源加载路径除了AssetBundle和部分可以通过WWW从外部加载的资源,其他的Unity加载的资源都通过Unity打包成某种文件格式打包到apk中。。而且Unity又不开源。

所以要实现UnityRuntime一个关键的就是要能做到将apk中的资源文件剥离出来,并在Unity搜索该资源文件时将路径重定向到外部资源实际存储路径。
这一步因为apk中的资源很多都跟场景绑定,而且资源文件之间也有着依赖关系,要加载某个场景时,属于该场景的资源文件都要存在,而且依赖的资源也要存在,加载场景才会完整,所以有时候达到的效果会不理想(首包依赖其他场景的资源文件的时候,就要把依赖的这个场景的资源文件包括依赖链都加到首包中,这样首包就可能还会太大)

这里的首包是UnityRuntime运行游戏前下载的第一个保证游戏可以正常启动的第一个资源包(其实就是第一个场景在apk中的所有资源文件及依赖的资源文件)

结尾

Runtime其实就是一个Android上的app,Android我不懂,app部分别人负责了。。所以我研究的是Unity部分的,目前已经可以达到预想的结果,不过目前稳定性还没有经过具体的测试,而且只支持armeabi-v7 32位架构的cpu而已。。还有很多地方需要改进

上一篇下一篇

猜你喜欢

热点阅读