Unity AssetBundle 打包与加载

 Ab目前只接触了打包与加载这两个分支,Unload和网络加载还没接触,说一说这个脚本怎么使用

一,打包

这个Unity5.6以上版本实际上是有直接打包的工具的,名字叫AssetBundleBrowser,在资源商店里面,可以直接拖拽上去打包,我用自己的项目打包成功了,但是公司的项目失败了,目前没找到原因,猜测是资源重复的问题,或者是我忽视了某个细节。

然后就是使用脚本打包了,代码如下

using UnityEngine;
using UnityEditor;

public class Export : MonoBehaviour {

    [@MenuItem("Test/BuildAssetBundles01")]
    static void BuildAssetBundles()
    {
        //BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);
        AssetBundleBuild[] buildMap = new AssetBundleBuild[1];
        buildMap[0].assetBundleName = "terrain";
        在Project视图中,选择要打包的对象  
        //Object[] selects = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
        //string[] resourcesAsset = new string[selects.Length];
        //for (int i = 0; i < selects.Length; i++)
        //{
        //    //获得选择 对象的路径
        //    resourcesAsset[i] = AssetDatabase.GetAssetPath(selects[i]);
        //}
        string[] resourcesAsset = new string[1];
        resourcesAsset[0] = "Assets/prefab/terrain.prefab";
        //resourcesAsset[1] = "Assets/cubelogic.cs";
        buildMap[0].assetNames = resourcesAsset;
        BuildPipeline.BuildAssetBundles("Assets/AssetBundles/Resources", buildMap, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
        Debug.Log("资源处理成功");

    }
}

使用注意事项:1,这个脚本是要放在Editor文件下运行的,没有的话要自己创建一个文件,注意名字别写错了,大小写要规范

2,脚本放入后会生成一个组件按钮,和Window啊,Editor在一排,点击使用生成文件

3,文件生成为两个,一个是无后缀文件,另一个是manifest记录文件之间的关系,记住他们的文件位置,后面加载的时候要用到

4,打包的之前要先设置资源的AssetName,就是Unity右下角资源的名字,统一小写,就算大写它也会改成小写

5,资源的类型要注意,一定要是prefab才可以

 

二,加载

void Start () {
    AssetBundle abres = AssetBundle.LoadFromFile("Assets/AssetBundles/Resources/cube"); //
        if (abres != null)
        {
            Instantiate(abres.LoadAsset("cube"));
          
        }
string[] names = abres.GetAllAssetNames();
          foreach (var elem in names)
                Debug.Log("Asset name is " + elem);

          Object[] objs = abres.LoadAllAssets();
           foreach (var elem in objs)
              Debug.Log("Obj is " + elem.name);
}

使用加载注意:1,脚本文件位置没有要求,使用时需要挂载一个空物体(不是空的也行)

2,我使用这段代码的时候实际上并没有集体加载,而是用的比较笨的方法逐个加载的,目前还在找原因,大神知道的话指导我一哈

3,abres.LoadAsset这个函数里面传的实际上是资源的AssetName,就是右下角设置的Name,不要写错

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值