• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

LuaFramework-打包AssetBundle工具

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1203/219.html

LuaFramework-打包AssetBundle工具

 

下面我们常州微信公众平台开发网站达人-幻天网络给大家介绍luaframework的打包,前提是大家要了解assetbundle的热更原理和流程,把prefab打包成.asset格式作为传输的数据。

using UnityEngine;

using System.Collections.Generic;

using UnityEditor;

using System.IO;

using System.Text;

public enum SuffixEnum

    Prefab,

    Png,

    Csv,

    Txt,

public class AddBuildMapUtility : EditorWindow

    int count = 0;

    List<string> bundleNameList = new List<string>();

    List<SuffixEnum> suffixList = new List<SuffixEnum>();

    List<string> pathList = new List<string>();

    Vector2 scrollValue = Vector2.zero;

    [MenuItem("LuaFramework/AddBuildMapUtility")]

    static void SetAssetBundleNameExtension()

   

        EditorWindow.GetWindow<AddBuildMapUtility>();

   

    void OnGUI()

   

        EditorGUILayout.BeginHorizontal();

        if (GUILayout.Button("添加一项"))

       

            AddItem();

       

        if (GUILayout.Button("清除所有项"))

       

            Clear();

       

        if (GUILayout.Button("读取文件(.csv)"))

       

            Clear();

            string path = EditorUtility.OpenFilePanel("", Application.dataPath, "csv");

            string content = File.ReadAllText(path);

            string[] contents = content.Split(new string[] "\r\n" , System.StringSplitOptions.RemoveEmptyEntries);

            for (int i = 0; i < contents.Length; i++)

           

                string[] a = contents[i].Split(',');

                AddItem(a[0], StringToEnum(a[1]), a[2]);

           

       

        if (GUILayout.Button("保存"))

       

            string path = EditorUtility.SaveFilePanel("", Application.dataPath, "AssetBundleInfo", "csv");

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < count; i++)

           

                if (string.IsNullOrEmpty(bundleNameList[i])) break;

                sb.Append(bundleNameList[i] + ",");

                sb.Append(EnumToString(suffixList[i]) + ",");

                sb.Append(pathList[i] + "\r\n");

           

            File.WriteAllText(path, sb.ToString());

            AssetDatabase.Refresh();

       

        if (GUILayout.Button("自动填写(所有选中的)"))

       

            int startIndex = count;

            for (int i = 0; i < Selection.objects.Length; i++)

           

                AddItem();

                AutoFill(startIndex, Selection.objects[i]);

                startIndex++;

           

       

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.LabelField("注意:请以文件夹为单位进行选择!!!文件夹名即为包名!!!");

        scrollValue = EditorGUILayout.BeginScrollView(scrollValue);

        for (int i = 0; i < count; i++)

       

            EditorGUILayout.BeginVertical();

            EditorGUILayout.BeginHorizontal();

            EditorGUILayout.LabelField(i.ToString() + "AB包名");

            bundleNameList[i] = EditorGUILayout.TextField("", bundleNameList[i]);

            suffixList[i] = (SuffixEnum)EditorGUILayout.EnumPopup("类型", suffixList[i]);

            pathList[i] = EditorGUILayout.TextField("路径", pathList[i]);

            if (GUILayout.Button("自动填写(单个)"))

           

                AutoFill(i, Selection.objects[0]);

           

            if (GUILayout.Button("输出路径"))

           

                Debug.Log(pathList[i]);

           

            if (GUILayout.Button("删除该项"))

           

                RemoveItem(i);

           

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.EndVertical();

       

        EditorGUILayout.EndScrollView();

   

    void Clear()

   

        count = 0;

        bundleNameList = new List<string>();

        suffixList = new List<SuffixEnum>();

        pathList = new List<string>();

   

    void AddItem(string bundleName = "", SuffixEnum suffix = SuffixEnum.Prefab, string path = "")

   

        count++;

        bundleNameList.Add(bundleName);

        suffixList.Add(suffix);

        pathList.Add(path);

   

    void RemoveItem(int index)

   

        count--;

        bundleNameList.Remove(bundleNameList[index]);

        suffixList.Remove(suffixList[index]);

        pathList.Remove(pathList[index]);

   

    void AutoFill(int index, Object selectedObject)

   

        string path = AssetDatabase.GetAssetPath(selectedObject);

        bundleNameList[index] = path.Remove(0, path.LastIndexOf("/") + 1).ToLower() + LuaFramework.AppConst.ExtName;

        string[] files = Directory.GetFiles(path);

        string[] temp = files[0].Split('.');

        suffixList[index] = StringToEnum("*." + temp[1]);

        pathList[index] = path;

   

    public static string EnumToString(SuffixEnum se)

   

        switch (se)

       

            case SuffixEnum.Prefab:

                return "*.prefab";

            case SuffixEnum.Png:

                return "*.png";

            case SuffixEnum.Csv:

                return "*.csv";

            case SuffixEnum.Txt:

                return "*.txt";

            default:

                return "null";

       

   

    public static SuffixEnum StringToEnum(string s)

   

        switch (s)

       

            case "*.prefab":

                return SuffixEnum.Prefab;

            case "*.png":

                return SuffixEnum.Png;

            case "*.csv":

                return SuffixEnum.Csv;

            case "*.txt":

                return SuffixEnum.Txt;

            default:

                return SuffixEnum.Prefab;

       

   

 

 

修改Packager.csHandleExampleBundle()

   /// <summary>

    /// 处理框架实例包

    /// </summary>

    static void HandleExampleBundle()

        string resPath = AppDataPath + "/" + AppConst.AssetDir + "/";

        if (!Directory.Exists(resPath)) Directory.CreateDirectory(resPath);

        //AddBuildMap("prompt" + AppConst.ExtName, "*.prefab", "Assets/LuaFramework/Examples/Builds/Prompt");

        //AddBuildMap("message" + AppConst.ExtName, "*.prefab", "Assets/LuaFramework/Examples/Builds/Message");

        //AddBuildMap("prompt_asset" + AppConst.ExtName, "*.png", "Assets/LuaFramework/Examples/Textures/Prompt");

        //AddBuildMap("shared_asset" + AppConst.ExtName, "*.png", "Assets/LuaFramework/Examples/Textures/Shared");

        string content = File.ReadAllText(Application.dataPath + "/AssetBundleInfo.csv");

        string[] contents = content.Split(new string[] "\r\n" , System.StringSplitOptions.RemoveEmptyEntries);

        for (int i = 0; i < contents.Length; i++)

       

            string[] a = contents[i].Split(',');

            //UnityEngine.Debug.Log(a[0]); UnityEngine.Debug.Log(a[1]); UnityEngine.Debug.Log(a[2]);  

            AddBuildMap(a[0], a[1], a[2]);

       

   



上篇:上一篇:Unity客户端架构-PanelManager
下篇:下一篇:Unity3D通过脚本修改游戏对象图标Select Icon