首页 > 编程知识 正文

fairygui unity

时间:2023-05-06 12:36:12 阅读:276643 作者:2528

参考资料3

将发布后的文件打包为两个AssetBundle,即定义文件和资源各打包为一个bundle(desc_bundle+res_bundle)。这样做的好处是一般UI的更新都是修改元件位置什么的,不涉及图片资源的更新,那么只需要重新打包和推送desc_bundle就行了,不需要让玩家更新通常体积比较大的res_bundle,节省流量。打包程序由开发者按照自己熟悉的方式自行实现。以demo为例,请遵循以下规则打包:

demo_fui.bytes单独打包为desc_bundle;其他资源(demo_atlas0.png等),打包到res_bundle。

用到上述规则,包分为2个包,test"+"_desc"和"test"+"_res"两个AB包。

AssetsResourcescommon文件夹的内容是 FGUI 编辑器 里面common发布后的内容。

只有

AssetsResourcescommoncommon_fui.bytes文件的AssetBundle通过下面这些代码自动设置为fairygui/common_desc

 AssetsResourcescommon除了common_fui.bytes文件以外AssetBundle通过下面这些代码自动设置为fairygui/common_res

用到Unity AssetBundle Browser tool ,参考资料1,2

在FGUI编辑器中,对已经完成的 模块,进行 发布。会在目标 打出几个文件,.byte和.png。

简化Unity AssetBundle Browser tool打包的速度

Window-AssetBundleBrowser,打开ABB的窗口。

把要打包的归类,直接添加 文件夹,并对文件夹的名字设置ab包的名字

在Project中,选中要打包的文件夹,在Inspector视图,设置AssetBundle名字

下文有自动 设置 文件assetbundleName的脚本BuildAssetBundle_.cs

ABB中添加文件夹

 

打包成功后用AssetStudioGUI进行查看

 这是 uigeneral.prefab预制体,挂载了FGUI的UIPanel脚本和FairyUIAdpter脚本的详情。这样,说明打包正常。

打开在Unity-Resource-common的发布后的文件,与FGUI编辑器的对应 模块 的文件是否一致。

 用AS打开Unity打包后的文件,与上面的文件是否一致。一致,说明正常。

打包AB包的一些错误

使用Unity AssetBundle Browser tool,打包AB包失败,的一些报错。

硬盘空间不足。

删除一些 不能识别的ab包的名字

AssetBundles-Configure

动态设置Unity项目内文件的AssetBundle

BuildAssetBundle_.cs

using System.Collections;using System.Collections.Generic;using System.IO;using UnityEditor;using UnityEngine;public class BuildAssetBundle_ { /// <summary> /// 包名,FGUI的AB包名 /// </summary> public static Dictionary<string, string> dict_ = new Dictionary<string, string>() { { "common","fairygui/common"},//fairygui包名。在Unity中文件的assetBundle前缀名 { "main","fairygui/main"}, }; [MenuItem("Assets/变量文件夹设置AB包名字 ")] static void BuildAllAndroidAssetBundles() { List<string> strs = new List<string>(dict_.Keys); for (int i=0;i < strs.Count ;i++) { setAB(strs[i], dict_[strs[i]]); } }// private static void setAB(string fileName,string fileABName) { string abName = fileABName;//"fairygui/common";//父文件夹名字 string fguiPackageName = fileName;//"common";//文件夹名字 string descAB = "_desc";//fairygui/common_desc string resAB = "_res";//fairygui/common_res //string dir = "E:/ui/test/Assets/Resources";//"AssetBundles/Android";//E:uitestAssetsResourcesbulid int i = 0; string[] arrStrAudioPath = Directory.GetFiles(Application.dataPath + "/Resources/" + fguiPackageName, "*", SearchOption.AllDirectories); //循环遍历每一个路径,单独加载 foreach (string strAudioPath in arrStrAudioPath) { if (System.IO.Path.GetExtension(strAudioPath) != ".meta") { //替换路径中的反斜杠为正斜杠 string strTempPath = strAudioPath.Replace(@"", "/"); Debug.Log(strAudioPath); //截取我们需要的路径 strTempPath = strTempPath.Substring(strTempPath.IndexOf("Assets")); //根据路径加载资源 UnityEngine.Object objAudio = AssetDatabase.LoadAssetAtPath(@strTempPath, typeof(UnityEngine.Object)); if (System.IO.Path.GetExtension(strAudioPath) == ".bytes") { DoSetAssetBundleName(abName + descAB, objAudio); } else if (System.IO.Path.GetExtension(strAudioPath) != ".bytes" && System.IO.Path.GetExtension(strAudioPath) != ".cs") { DoSetAssetBundleName(abName + resAB, objAudio); } }// }// } /// <summary> /// 修改bundle名字 /// </summary> /// <param name="abname">AssetBundleName的命名规则</param> /// <param name="path">遍历的文件的文件路径</param> static void DoSetAssetBundleName(string abname, UnityEngine.Object obj) { Debug.Log(obj.name); var importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(obj)); importer.assetBundleName = abname; //importer.assetBundleVariant = "bundle"; }// public static string getFileSuffix(string fileName) { return fileName.Substring(fileName.LastIndexOf("."));//例如:abc.png 截取后:.png } public static string getFilesFirst(string fileName) { int num = getFileSuffix(fileName).Length; if (num < fileName.Length) { num = fileName.Length - num; } return fileName.Substring(0, fileName.LastIndexOf("."));//例如:abc.png 截取后:.png }}

FairyGUI,UNITY项目示例打包文件BuildAssetBundles

AssetsFairyGUI-unity-masterAssetsExamplesEditorBuildAssetBundles.cs

对单一的 文件进行打包。

using UnityEngine;using UnityEditor;using System.IO;public class BuildAssetBundles{ [MenuItem("Window/Build FairyGUI Example Bundles")] public static void Builde() {#if (UNITY_5 || UNITY_5_3_OR_NEWER) for (int i = 0; i < 10; i++) { AssetImporter.GetAtPath("Assets/FairyGUI/Examples/Resources/Icons/i" + i + ".png").assetBundleName = "fairygui-examples/i" + i + ".ab"; } AssetImporter.GetAtPath("Assets/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes").assetBundleName = "fairygui-examples/bundleusage.ab"; AssetImporter.GetAtPath("Assets/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png").assetBundleName = "fairygui-examples/bundleusage.ab"; BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath, BuildAssetBundleOptions.None, BuildTarget.Android);#else for (int i = 0; i < 10; i++) { Object obj = AssetDatabase.LoadAssetAtPath("Assets/FairyGUI/Examples/Resources/Icons/i"+i+".png", typeof(Object)); BuildPipeline.BuildAssetBundle(obj, null, Path.Combine(Application.streamingAssetsPath, "fairygui-examples/i" + i + ".ab"), BuildAssetBundleOptions.CollectDependencies, BuildTarget.Android); } Object mainAsset = AssetDatabase.LoadAssetAtPath("Assets/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes", typeof(Object)); Object[] assets = new Object[] { AssetDatabase.LoadAssetAtPath("Assets/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png", typeof(Object)) }; BuildPipeline.BuildAssetBundle(mainAsset, assets, Path.Combine(Application.streamingAssetsPath, "fairygui-examples/bundleusage.ab"), BuildAssetBundleOptions.CollectDependencies, BuildTarget.Android); AssetDatabase.Refresh();#endif }}

相关资料:

1.[Unity][FairyGUI]www本地加载AssetBundle资源

2.[FairyGUI][Unity]加载FGUI打包成AB包的资源

3.

参考资料:

1.第1.9篇 使用 Unity AssetBundle Browser tool (AssetBundle系列完结)

2.Unity3d的AssetBundle打包——AssetBundle Browser(简单实现资源复用)

3.显示UI面板

# 加载UI包

4.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。