• Unity3d中使用assetbundle


    1、导出assetbundle:

      ①单个资源导出成assetbundle;

      ②多个资源导出成一个assetbundle;

    2、读取assetbundle:

      ①加载到内存;

      ②解压为具体资源。

    1、导出assetbundle:

      

    ①单个资源导出成assetbundle;

    BuildPipeline.BuildAssetBundle(Object obj, null, string path, BuildAssetBundleOptions.CollectDependencies, BuildTarget.Android);
    
    //obj 单个资源,转成Object类型
    //path 路径(例如:"Assets/streamingassets/obj.unity3d"),资源包的后缀名可以任意写或不写
    //BuildAssetBundleOptions.CollectDependencies 包含资源的依赖关系,比如要导出的资源是一个prefab,就会把其引用的mesh、贴图、材质球、动画统统导出到资源包里面去
    //BuildTarget.Android 导出的资源包是给什么平台用的,Android、PC、或者别的什么


     

      ②多个资源导出成一个assetbundle;

    BuildPipeline.BuildAssetBundle(null, Object[] objs, string path, BuildAssetBundleOptions.CollectDependencies, BuildTarget.Android);
    
    //objs 包含多个资源的数组,Object[]类型
    //path 路径(例如:"Assets/streamingassets/obj.unity3d"),资源包的后缀名可以任意写或不写
    //BuildAssetBundleOptions.CollectDependencies 包含资源的依赖关系,比如要导出的资源是一个prefab,就会把其引用的mesh、贴图、材质球、动画统统导出到资源包里面去
    //BuildTarget.Android 导出的资源包是给什么平台用的,Android、PC、或者别的什么

    2、读取assetbundle:

      ①加载到内存;

      ②解压为具体资源。

    IEnumerator Load(string path, string name)
    {
        /*下面是加载到内存的过程*/
        WWW bundle = new WWW(path);  //例如:"Assets/streamingassets/obj.unity3d"
        yield return bundle;
    
        /*下面是解压为具体资源的过程*/
        Object obj = bundle.assetBundle.Load(name);  //name是具体资源的名字      
    }

    注:IEnumerator是协程,可以想象成Unity3d中的多线程,就是同时可以干很多事情的意思,虽然原理上与多线程不同,但使用起来的效果几乎没有区别。如果要处理的是很多资源的assetbundle的话,不管是导成一个了,还是多个的,要结合策划的具体需求合理规划协程的组织。

    随手补充:

    [MenuItem("Assets/Export Android Assetbundle")]
    static void Export()
    {
        string fileName = Selection.activeObject.name;
        string assetbundlePath = EditorUtility.SaveFilePanel("Save", Application.dataPath, fileName, "assetbundle");
        BuildPipeline.BuildAssetBundle(Selection.activeObject, null, assetbundlePath, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets, BuildTarget.Android);        
    }
  • 相关阅读:
    Gradle在大型Java项目上的应用
    2015年,移动开发都有哪些热点?
    为什么寄存器比内存快?
    Gogs:可能是比Gitlab更好的选择
    自定义元素–为你的HTML代码定义新元素
    在DLL编程中,导出函数为什么需要extern "C"
    c调用c++编的dll,c++调用c编写的dll,extern “C”的用法
    C/C++:函数的编译方式与调用约定以及extern “C”的使用
    在VS2015中用C++编写可被其它语言调用的动态库DLL
    C++在VS下创建、调用dll
  • 原文地址:https://www.cnblogs.com/fengrenyuan/p/4242555.html
Copyright © 2020-2023  润新知