Unity地形切割后打包成AssetsBundle再进行加载的笔记

1.TerrainData文件切割成小块以后,分别打包成单独的AssetsBundle文件,如果不对依赖的资源进行bundleName进行设置,就会出现这部分依赖资源重复打包的问题。单独设置bundleName以后,所有依赖的资源都打包成了单独的文件。解决了资源重复打包的问题。

2.资源依赖的信息是记录在.manifest文件里的,但是记录的是绝对路径。因为项目制作过程中是分为1:资源整合项目,2正式工程项目,两个项目来使用的。所以,自动生成的依赖信息不能直接使用。(暂时还没有测试在同一个工程下的自动加载依赖资源的功能。)所以,加载后的地形丢失了所有的贴图和模型资源。为了解决这个问题,先使用了一个最简单粗暴的方式。

    将所有的依赖资源设置为相同的bundleName,这样所有的依赖资源就直接打包到了同一个文件中。然后,在地图初始化的时候,首先将依赖资源的ab包读取到内存中。代码如下

private void LoadWorldMapDepend()
        {
            string url = Application.dataPath + "/Resources/WorldMap/ABS/Windows/worldmapdepend";

            AssetBundle assetBundle = AssetBundle.LoadFromFile(url);
            string[] assetsName = assetBundle.GetAllAssetNames();
            for (int i = 0; i < assetsName.Length; i++)
            {
                assetBundle.LoadAsset(assetsName[i]);
            }
        }

这种方式解决了依赖资源无法加载的问题,但是存在的问题也很明显。首先地图切割本身就是因为地图规模的庞大,所以,地图里的依赖资源量一定很大,不加区别的打包到同一个文件,然后全部解压到内存中,会造成严重的内存浪费。所以,后期还要通过其他方式进行优化。初步考虑的方案是,仍然沿用自动生成的.manifest文件,在拷贝文件的过程中,把文本信息中记录的路径信息进行修改,这个方案留在之后进行尝试。


3.(未解决)地形资源在加载的时候,虽然依赖资源都已经可以正常使用,但是仍然会有LogError信息:

TerrainData is missing splat texture index(texture name), make sure it is marked for read/write in the importer.

大量的Console信息输出,也会对性能产生很严重的影响。不知道TerrainData在初始化的时候是怎样的逻辑,所以不好判断产生这个问题的原因。留在以后去解决。

=========================2018.5.22=========================

关于上次遗留方案的尝试记录:


AB文件在打包的时候会生成一个与存储文件夹的名字一致的ab文件,这个文件中包含所有资源之间的依赖关系。可以通过这样的方式加载出来:

AssetBundle asset = AssetBundle.LoadFromFile(manifestPath);
manifest = asset.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
可以通过AssetBundleManifest的方法GetAllDependencies(string name)获得特定的ab文件依赖的资源的ab包名字。



新的问题

1.从AB文件中加载的地形,在编辑器中可以正常应用所需要的贴图资源,打包成PC版以后,贴图资源丢失了。

2.AB文件加载后,在内存中属于非托管的,所以必须调用unload()方法,才能从内存中释放掉。但是依赖资源的ab包加载后如果调用Unload()方法,地形的贴图资源就会丢失。


解决方案:问题1通过查看运行log


第一行提示,shader丢失。原因是项目中除了AB包中的地形文件外,没有其他的Terrain文件,所以在打包的过程中没有对Nature/Terrain/Diffuse的引用。按照提示,把需要的Shader添加到Graphices中就可以了。Editor->Graphics


保存,打包,OK!

猜你喜欢

转载自blog.csdn.net/u010133610/article/details/80338392
今日推荐