如果要打包成assetbundle,都要预先对资源进行做标记
1.如果对一个3d模型进行打包,而不对其对应的材质球进行打ab包,那么这种依赖关系是没有什么效果的,如果说我们想去解决ab包的依赖关系的话,至少要细化到材质球,细化到模型是没有用的,当然也可以细化到贴图,但一般来说细化到材质球就可以了,日常的开发中,一个贴图对应一个材质,所有细化到材质球就可以了
3.如果需要打包的资源的AssetBundle标记名字存在层级结构,那么打包出来的ab包也会放在对应的层级结构目录下(需要打包的资源TestPrefab的标记名字设置为:Download/Prefab/TestPrefab,其打出来的ab包也会放在对应的download/prefab目录下)
4.设置ab包标记的名字一律被认作小写字母,大小会自动转化为小写,一般普通ab包的后缀为:*.assetbundle,场景的后缀为:*.unity3d
5.ab包总的依赖关系信息文件会放在根目录下,名字与根目录的文件夹名称一样,名字如:MyAssetBundle.manifest
如果一个预制prefab包含 prefabA和prefabB两个子物体,并且 prefabA和prefabB两个子物体各自都有属于自己的模型,材质和贴图
1.如果只设置prefab预制的AssetBundle名字,并且打包,那么打出来的prefab 对应的ab包将会很大,其实是把所有依赖于自身的资源都打进一个包里面,
包括自身以及子物体依赖的所有可打包的资源(模型,材质球,贴图)
2.如果设置prefab预制和 prefabA,prefabB两个子物体对应的模型 AssetBundle名字,并且打包,那么打出来的prefab对应的 ab包也会很大,相对来说是小了,但也没有小很多;两个子物体对应的模型的ab包也很大
3.如果设置prefab预制和 prefabA,prefabB两个子物体的对应的模型,材质球 AssetBundle名字,并且打包,那么打出来的prefab对应的 ab包将会变的很小,两个子物体对应的模型的ab包也很小,但是两个子物体对应的材质球的ab包会很大(说明这种打包方式,对于依赖关系来说是可行的)
3.如果对prefab预制所依赖的所有资源都进行ab打包,打出来的ab包中,除了贴图的ab包很大,其他的ab包都比较小(说明这种打包方式也是可行的)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
public class CreateAssetBundle{
[MenuItem("Tools/CreateAssetBundle(对所有ab资源进行打包)")]
static void CreateAB()
{
string savePath = Application.dataPath + "/../MyAssetBundles/";
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
Debug.Log("创建ab资源, CreateAssetBundle");
BuildPipeline.BuildAssetBundles(savePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
Application.OpenURL(savePath);
}
}