zoukankan      html  css  js  c++  java
  • Unity 游戏框架搭建 2017 (十一) 简易 AssetBundle 打包工具(一)

    最近在看 Unity 官方的 AssetBundle(以下简称 AB )的教程,也照着做了一遍,不过做出来的 AssetBundleManager 的 API 设计得有些不太习惯。目前想到了一个可行的解决方案。AB 相关的内容有点多,所以为了良好的阅读体验,就把教程分为几个小文章,一次写一个点。

    1. AssetBundle设置:

    首先要确定一个专门打资源包用的目录,我的框架定的目录是 QArt/QAB,并存放了一些 Prefab 资源,如下所示。


    然后选定 TestAB 目录,将 Inspector 窗口的设置为如下图所示:

    一级名字为 testab,二级扩展名为 unity3d。 这样 AB 就设置好了。

    2. 制作编辑器工具。

    这里打包的核心 API 只有一个,就是

    BuildPipeline.BuildAssetBundles (outPath, 0, EditorUserBuildSettings.activeBuildTarget);

    贴上编辑器工具代码:

    using UnityEditor;
    using System.Collections;
    using UnityEngine;
    using System.IO;
    using System.Collections.Generic;
    
    namespace QFramework.Editor {
    
        public class QABEditor
        {
            [MenuItem("QFramework/AB/Build")]
            public static void BuildAssetBundle()
            {
                // AB包输出路径
                string outPath = Application.streamingAssetsPath + "/QAB";
    
                // 检查路径是否存在
                CheckDirAndCreate (outPath);
    
                BuildPipeline.BuildAssetBundles (outPath, 0, EditorUserBuildSettings.activeBuildTarget);
    
                // 刚创建的文件夹和目录能马上再Project视窗中出现
                AssetDatabase.Refresh ();
            }
    
            /// <summary>
            /// 判断路径是否存在,不存在则创建
            /// </summary>
            public static void CheckDirAndCreate(string dirPath)
            {
                if (!Directory.Exists (dirPath)) {
                    Directory.CreateDirectory (dirPath);
                }
            }
         }
    }
    

    这个脚本要放在 Editor 目录下!!!

    这个脚本要放在 Editor 目录下!!!

    这个脚本要放在 Editor 目录下!!!

    使用方法:

    点击QFramework/AB/Build


    之后,生成的AB包如下所示:


    AB包就打好了,接下来开始测试AB包的使用。

    3.测试:

    代码很简单,如下所示,一些常识性的问题就不介绍了。

    using UnityEngine;
    using System.Collections;
    using System.IO;
    
    namespace QFramework.Example {
        public class TestABEditor : MonoBehaviour {
    
            // Use this for initialization
            IEnumerator Start () {
    
                WWW www = new WWW ("file:///" + Application.streamingAssetsPath + Path.DirectorySeparatorChar + "QAssetBundle" + Path.DirectorySeparatorChar + "testab.unity3d");
    
                yield return www;
    
                if (string.IsNullOrEmpty (www.error)) {
                    var go = www.assetBundle.LoadAsset<GameObject> ("Canvas");
    
                    Instantiate (go);
                }
                else {
                    Debug.LogError (www.error);
                }
    
            }
    
            // Update is called once per frame
            void Update () {
    
            }
        }
    }

    运行结果:

    最初版的打包工具就做好了,接下来到了吐槽的时刻了。

    4.存在的问题:

    1. 不支持多平台,只能打当前 PlayerSettings 所设置的平台的 AB 包,有点麻烦。
    2. 需要手动设置 AB 包的名字和扩展名,这个问题完全可以交给代码实现。
    3. 看不到整个工程究竟有哪些设置了AB 包的名字,哪些没设置,有些无关的资源误操作设置了AB 包名,要排查这种资源要花些时间。
    4. 测试的代码中暴露的字符串太多了,其中包括 AB 包名,AB 包路径,要加载的资源名字,这些都可以集中管理或者生成代码。
    5. 欢迎补充

    这些问题在此后的文章中一步一步解决,希望大家多给些建议。

    欢迎讨论!

    转载请注明地址:凉鞋的笔记:liangxiegame.com

    更多内容

  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/liangxiegame/p/Unity-you-xi-kuang-jia-da-jian-shi-yi-jian-yiAsset.html
Copyright © 2011-2022 走看看