Unity 简易AssetBundle打包方法(一)
一.打包AB
本文全程以Unity中基础3d Object 以及部分材质作为AssetBundle(AB)导出素材
创建一个Editor文件夹(一定要放在这个文件夹里面),并在其中创建一个C#脚本MyAssetBundles,代码如下
using System.IO;
using UnityEditor;
public class MyAssetBundles {
[MenuItem("Assets/BuildBundles")]//在Assets选项中添加点击按钮
static void BuildBundles()
{
string assetBundlesLibrary = "AssetBundles";
if (!Directory.Exists(assetBundlesLibrary))//判断本地目录是否已经存在目录名
{
Directory.CreateDirectory(assetBundlesLibrary);
}
BuildPipeline.BuildAssetBundles(assetBundlesLibrary, BuildAssetBundleOptions.None,
BuildTarget.StandaloneWindows64);//在此目录下创建AssetBundle
}
}
其次要对需要打包的预制体添加生成的名字,后面的选项可以修改后缀名为unity3d
我们找到Assets->BuildBundles运行即可对这个Cube进行打包
找到你项目的根目录里面就会有一个AssetBundles文件夹,里面就是打包的内容
scene文件夹下:
二.加载AB包
首先创建一个脚本 LoadFileFromAB ,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoadFileFromAB : MonoBehaviour {
// Use this for initialization
void Start ()
{
AssetBundle ab=AssetBundle.LoadFromFile("AssetBundles/scene/cube.unity3d");//加载本地AB包内容
GameObject cube=ab.LoadAsset("Cube") as GameObject;//LoadAsset中参数为导出前Prefab名字
Instantiate(cube);//生成cube
}
}
然后将脚本挂载在Camera上 运行即可 发现已经创建了一个Cube(Clone)
此时,我们将整个Cube(Clone)拖拽至Project面板中,做成Prefab预制体,然后结束运行会发现,Cube材质已经丢失,这是因为运行的时候是在内存中加载AB包中cube所带有的材质,一旦结束运行,自动回收了。
三.打包策略
对于一些需要公共材质的预制体,推荐将材质球和贴图合并为同一AB名字打包,再将不同预制体进行打包
例子:我们先创建两个不同的物体,并为其附上材质球,修改颜色为红色
然后我们开始给他们打包,修改Assetbundle名
运行Assets->BuildBundles后我们找到目录下打包的文件
我们这里看到capsule和cube分别打包了占40kb
接下来我们换一种打包方式
我们对他们两个共有的材质球也进行AB包命名
然后再运行BuildBundles(先删除之前我们打包完的文件)观察文件目录
现在只有我们打包的材质球占了39kb,其余的capsule和cube,由于他们是公用一个材质球,Unity自动帮我们内部打包时进行了打包依赖,所以我们省下了近一半的容量
那么我们如何导入呢?
我们应该在使用资源之前,先加载依赖的材质包
未完待续…