• [Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.


    接上文,项目中由于须要UI热更新,所以我使用了AssetBundle这个解决方式.


    一般来说,我们使用AssetBundle生成资源包经常使用的方案是例如以下这么用:

    using UnityEngine;
    using UnityEditor;
    
    /// <summary>
    /// 导出资源类
    /// </summary>
    public class ExportGameResources
    {
        static BuildAssetBundleOptions m_option = BuildAssetBundleOptions.CollectDependencies |  // 收集全部依赖关系
                                                  BuildAssetBundleOptions.DeterministicAssetBundle;
        /// <summary>
        /// 导出NGUI成Assetbundle
        /// </summary>
        [MenuItem("Assets/导出/资源")]
        static public void ExportNGUI()
        {
            // 获取编辑器中选择的项
            Object[] objs = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
    
            // 没有选中项
            if (objs.Length == 0)
            {
                return;
            }
    
            string _savepath = null;
            // 推断是多选还是单选
            if (objs.Length == 1)
            {
                // 获取保存路径
                _savepath = EditorUtility.SaveFilePanel("Save Resource", "", objs[0].name, "assetbundle");
    
                if (!_savepath.Equals(""))
                {
                    // 生成assetbundle
                    BuildPipeline.BuildAssetBundle(objs[0], null,
                           _savepath,
                           m_option,
                           EditorUserBuildSettings.activeBuildTarget);
                }
            }
            else
            {
                // 获取保存路径
                _savepath = EditorUtility.SaveFolderPanel("Save Resources", "", "");
    
                if (!_savepath.Equals(""))
                {
                    // 生成assetbundle
                    for (int i = 0; i < objs.Length; ++i)
                    {
                        BuildPipeline.BuildAssetBundle(objs[i], null,
                            _savepath + "/" + objs[i].name + ".assetbundle",
                            m_option,
                            EditorUserBuildSettings.activeBuildTarget);
                    }
                }
            }
    
            Debug.Log("导出成功,导出路径:" + _savepath);
        }
    }
    

    这就是我最開始写的将NGUI预制件打包成Assetbundle的方法.
    这种方法看起来没啥问题,使用WWW流载入也没有问题.
    可是真的如此吗?

    事实上我一開始也没有注意到AssetBundle中的资源依赖关系这个问题.

    由于我最開始生成的几个Assetbundle0均是ngui演示中的几个预制件,生成出来的大小比較正常一般几K到几十K.


    于是我天真的以为就这么用就好了.

    直到我開始做几个须要中文文本支持的界面时,才发现我跳进了一个小坑.


    TODO:.................


    PS:这个Blog嘛 不算啥专业的技术Blog,仅仅是随笔.

  • 相关阅读:
    基本类型与引用类型
    局部变量与实例变量
    语句块
    i++与++i
    JAVA基本概念
    网线8根线的排列方式
    Docker容器常用命令
    内存cache使用的场景
    Python爬虫:Xpath语法笔记
    python实现简单的聊天
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5155281.html
Copyright © 2020-2023  润新知