加载 UI 背景大图
// lua 使用:
if self.findBack_image ~= nil then
resMgr:UnLoadBigImage(self.findBack_image)
self.findBack_image = nil
self.topBg:SetActive(false)
self.topBg:GetComponent('Image').sprite = nil
end
self.findBack_image = "ui/tex/welfarebigui.unity3d"
self.topBg:SetActive(false);
resMgr:LoadBigImage(self.findBack_image, "ZaiXianJiangLiGongGaoTiao",function (sp)
self.topBg:SetActive(true);
self.topBg:GetComponent('Image').sprite = sp;
end)
// c# 源代码
// LoadBigImage 函数原型:
public delegate void LoadBigImageCallBack(Sprite sp);
...
/// <summary>
/// 初始化
/// </summary>
public void Initialize() {
string uri = string.Empty;
canDestroyBundles = new List<string>();
bundlesLoading = new Dictionary<string, float>();
bundles = new Dictionary<string, AssetBundle>();
bigImageScript = new Dictionary<string, LoadBigImage>();
bigImageAB = new Dictionary<string, AssetBundle>();
uri = Util.DataPath + AppConst.AssetDir;
if (!FileExit(uri, AppConst.AssetDir)) uri = Util.AppContentPath() + AppConst.AssetDir;
manifestbundle = AssetBundle.LoadFromFile(uri);
manifest = manifestbundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
}
public void LoadBigImage(string bundelName, string assetname, LoadBigImageCallBack cb)
{
if (bigImageScript.ContainsKey(bundelName)) return;
if (bigImageAB.ContainsKey(bundelName)) return;
GameObject go = new GameObject("BigImage");
LoadBigImage lbi = go.AddComponent<LoadBigImage>();
bigImageScript.Add(bundelName, lbi);
lbi.load(bundelName, assetname, cb);
}
public void UnLoadBigImage(string bundelName)
{
if (bigImageScript.ContainsKey(bundelName))
{
bigImageScript[bundelName].UnLoad();
}
if (bigImageAB.ContainsKey(bundelName))
{
bigImageAB[bundelName].Unload(true);
bigImageAB.Remove(bundelName);
}
}
LoadBigImage.cs 文件:
public class LoadBigImage : MonoBehaviour {
private AssetBundleCreateRequest m_abcr = null;
private string m_abname;
private string m_assetname;
private LoadBigImageCallBack m_func;
private bool m_ret = true;
public void load(string abname, string assetname, LoadBigImageCallBack func)
{
m_abcr = null;
m_abname = abname;
m_assetname = assetname;
m_func = func;
m_ret = false;
#if UNITY_EDITOR
if (AppFacade.Instance.SimulateAssetBundleInEditor)
{
string[] assetPaths = AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(abname, assetname);
if (assetPaths.Length == 0)
{
Debug.LogError("There is no asset with name \"" + assetname + "\" in " + abname);
return;
}
Sprite prefab = AssetDatabase.LoadAssetAtPath<Sprite>(assetPaths[0]);
if (m_func != null) m_func(prefab);
LuaHelper.GetResManager().RemoveImageObj(m_abname, null);
Destroy(gameObject);
return;
}
#endif