Unity3d中的资源打包和加载
资源打包
1、美术资源打包
美术资源包括:⾓⾊模型,复杂特效,动作,场景
1.注⼊shader依赖
因为这些资源都可能⽤到shader,所以批量化的将shader统⼀注⼊依赖打包所有的特效,⽽shader可以挂在⼀个gameobject上⾯(shader需要放在Resources ⽬录下)
2.打包后的⽬标⽬录
存放在Assets/StreamingAssets⽬录下,此⽬录会按原样打包到移动包中,此⽬录作为热更新操作⽬录
3.美术的源资源⽬录
美术资源不⽤存放到项⽬开发⽬录,可以另建⼀个资源项⽬,这个项⽬既可以保存美术资源也可以结合jenkins⾃动化美术资源打包使⽤
2、图集打包
在ngui中需要注⼊公共图集打包,但是在ugui中已经模糊了图集的概念,在打移动包时会⾃动的打包对应的图集,但是对于需要动态加载的图集,需要将这些图集打成预设,在游戏开始的时候加载到缓存。
3、UI预设打包
如果是ugui就不需要打包公共图集预设,直接打包所有ui即可
为了热更新,ui预设需要打包到StreamingAssets⽬录
将ui预设存放到Resources⽬录下,这样可以供pc调试的时候直接看效果,不需要打包。
将每个模块⽤到的所有预设存放到⼀个⽂件夹,并且以该⽂件夹名作于该模块的assetbundle名,当需要加载某个模块中的某个预设时路径设为⽤**/模块⽂件夹名/预设名
资源加载
1.美术资源加载
通过LoadManager进⾏异步加载管理,将需要加载的资源加⼊加载队列,然后在内存加载,加载完之后进⾏回调。其中有⼀个问题就是在等待队列中,如果我们加载相同的资源直接不加⼊队列,但实际上我们可能需要同时调⽤加载同⼀个地址资源,但是在不需要知道他加载的进度可能在还未加载完的时候在加载相同资源就直接被忽略了。
但是我们可以先加载⼀个,然后加载回调之后放⼊缓存,如果其他地⽅需要⽤到的话就在直接实例化就可以了。
2.图集加载
2.1.⼀种是系统默认打出的图集就是静态图集,可以通过
if (AssetBundles.TryGetValue(path, out ab))
{
Object[] obs = ab.LoadAll();
sprite = ab.Load(spriteName) as Sprite;特效资源网
}
2.2.动态加载的图集
需要有⼀个图集缓存器,对于android系统,对streamAsseting⽬录不可以直接读写,需要放到可读写⽬录中,只有放到可读写⽬录中才可以⽤AssetBundle.CreateFromFile()⽅式直接加载
3.ui预设加载
加载路径选择:如果打成AssetBundle包先从可读写⽬录查,可读写⽬录没有到就去包内的streamingAssets⽬录查,如果不到对应的AssetBundle包就去包内的Resources⽬录加载。
ui预设加载管理:需要有⼀个预设缓存器,通过传过去的路径先判断该模块assetbundle时候加载过,如果加载过直接load(预设名)就可以获取。
在pc我们上,⼀般是不⽤拷贝到可读写⽬录,直接在Resouces.Load(路径)就可以获取
值得注意的地⽅:Android平台下,包内不可以直接⽤www或者createFromFile⽅式读取,需要拷贝到可读写⽬录下,对于包内需要⽤协程和www组合才可以读取,但是pc和ios都是可以直接读取的。
4.加载简单特效
⽐如屏幕的飘雪花等,可以直接存放的Resources⽬录下,⽤Resources.load()加载