根据本地加载的方式,FGUI编辑器输出的图集文件一般会放在Unity项目的Resources目录下,然后根据不同的包名将该包所有图集(.png后缀,可能多个)打包成一个res_ab文件,描述文件(.byte后缀,单个)打包成desc_ab文件。这种方式的好处是可以将打包好的ab文件放到服务器用于下载使用,删除工程内的图集文件减少程序打包的大小(.ipa .apk)
以下是做的一个简单demo模拟FGUI外部加载ab文件的流程,仅供参考! (具体逻辑根据项目需求而定)
using UnityEngine;
using FairyGUI;
using System.Collections.Generic;
using System;
using Test;
/// <summary>
/// FairyGUI--ab数据加载方式(TODO:数据未存储到服务器)
/// </summary>
public class UIinitializeAB : MonoSingleton<UIinitializeAB>
{
#if UNITY_IOS
private string abLocalPath = Application.streamingAssetsPath + "/UI/iOS/";
#elif UNITY_ANDROID
private string abLocalPath = Application.streamingAssetsPath + "/UI/Android/";
#endif
//储存所有包名
private List<string> list = new List<string>()
{
"common","home","login"
};
//ab文件字典
private Dictionary<string, AssetBundle> _dic = new Dictionary<string, AssetBundle>();
private int num = 0;
private Action callBack;
public void Initialize(Action callBack)
{
this.callBack = callBack;
foreach (string str in list)
{
string res_abName = str + "res_bundle";
string desc_abName = str + "desc_bundle";
LoadAB(res_abName);
LoadAB(desc_abName);
}
}
public void LoadAB(string abName)
{
AssetBundleMgr.Instance.LoadABAsset(abName, abLocalPath + abName,(abFile)=>
{
_dic.Add(abName,abFile);
num ++;
if (num == list.Count * 2)
{
Debug.Log("load commplete:" + num);
TestBinder.BindAll();
Application.targetFrameRate = 60; //设置帧率
UIObjectFactory.SetLoaderExtension(typeof(MyGLoader)); //外部图片加载
foreach (string str in list)
{
string res_abName = str + "res_bundle";
string desc_abName = str + "desc_bundle";
UIPackage.AddPackage(_dic[desc_abName], _dic[res_abName]);
}
callBack?.Invoke();//初始化完成回调
}
});
}
}
这是我之前在某乎上写的文章,感觉对于用FGUI开发挺实用的,今天就搬来csdn了,希望对你有帮助!