大家都应该知道,unity做开发的时候,我们需要更新资源的时候,一般都是会打成AssetsBundle资源包的形式来操作,然后再加载资源包,得到里面新的资源。但是很多人不知道如何来操作这个,而且的话,有些时候会有一些局限性,比如怎么加载同一个包的所有内容等等。这些点我觉得要了解一下。所有在这里我来分享下我的做法。先上效果图。
这里做了一个很简单的demo,然后这个游戏物体我把它做成了预制体,然后把这个预制体做成了一个叫做prefab的包,很明显,它有三个不一样的材质,这里我特意做了3个材质。然后我们就开始打包了,如何打包我就不多废话了,之前也写过。不会的自己百度,不难。然后一般情况下加载AB包就是通过路径加载。这里只演示本地资源加载,通过路径。
很简单的加载方式,先根据路径(包名)加载包,然后得到包里的东西(同样式根据名字,如果不记得名字了,就去打包到的文件夹找总包的manifest文件看看).然后拿到资源就实例化预制体。这样就能生成出来了。这样也就用上这个包了。但是有人就会发现有些小问题出现了,首先第一个就是预制体出来了,但是没有材质,第二个就是我如果有很多的包,包里的资源也很多,那不是要写死过去。OK,针对这两个问题,解决方法如下。
首先材质没有的问题,这个很好解决,我们把它的依赖材质同样加载进来就可以了。记住,只要加载材质包,不用生成(废话,但是还是要说一下^0^)。那么问题来了,怎么才知道某个预制体有哪些依赖项呢?用manifest可以找到。代码如下(这个变量是AssetsBundleMenifest类型)menifest.GetAllDependencies(“你要得到依赖的包的包名”)。他返回一个数组,很明显,这个数组就是所有的依赖包的包名了(其实就是依赖包)。然后再循环加载出来就可以了。
第二个问题,假如我有很多包,我想一了百了一次性全加载了,这样该怎么办呢?这个也不是很难,但是性能可能不是很好。但是我们先不纠结性能的问题。先把需求搞定,性能再想办法。那么怎么做呢?我们应该知道打包后,会有一个总的包,包里呢有个menifest的文件,用文本打开就会发现它里面是我们打的所有的包。那么我们就通过这个文件来把所有的包加载出来就可以了。这里直接贴出代码,大家自己看看。
这样所有的包都加载出来了,然后再把每个包里面的具体资源加载出来,如果你想实例化预制体,就判断包里的资源类型是不是gameobject,是的话就实例化。这里写的比较简单,也没有考虑很多其他的点,注意:这是我个人的做法,并不官方。
好了,本次的分享就到此为止了,不喜勿喷哦!点击链接加入群聊【Unity/Cocos交流群】
网友评论