using UnityEngine;
using System.Collections.Generic;
using CommonUnity3D.MFUnity.LoadUtil;
using System;
namespace CommonAIClient.Unity.Utils
{
///
/// 载入一个资源
///
public class AssetLoader
{
private string mAssetBundleName;
private string mAssetName;
private Action mCallback;
private bool mASyncLoadAB;
private bool mASyncLoadAsset;
//工具
private List mDeps;
private int mDepsLoadIndex;
///
///
///
///
///
///
///
///
public AssetLoader(string assetBundleName, string assetName,
Action callback,
bool bASyncLoadAB = true, bool bASyncLoadAsset = true)
{
if (callback == null)
{
Debug.LogError("callback == null");
return;
}
if (string.IsNullOrEmpty(assetBundleName) || string.IsNullOrEmpty(assetName))
{
Debug.LogError("string.IsNullOrEmpty(assetBundleName) || string.IsNullOrEmpty(assetName)");
callback(false, null, null);
return;
}
mAssetBundleName = assetBundleName;
mAssetName = assetName;
mCallback = callback;
mASyncLoadAB = bASyncLoadAB;
mASyncLoadAsset = bASyncLoadAsset;
mDeps = MFUnityAssetBundleManager.GetInstance().GetDepList(mAssetBundleName);
LoadDeps(mDepsLoadIndex);
}
public void ForeachDepFile(System.Action action)
{
foreach (var elem in mDeps)
{
action(elem);
}
}
private void DepsCallback(string name, UnityEngine.Object o, object userdata, bool isLoadOK)
{
LoadDeps(++mDepsLoadIndex);
}
void LoadDeps(int index)
{
//加载完毕
if (mDeps.Count == mDepsLoadIndex)
{
MFUnityAssetBundleManager.GetInstance().GetAssetBundle(mAssetBundleName
, (ab) =>
{
if (mCallback != null)
{
if (ab == null)
{
Debug.LogError("AB " + mAssetBundleName + " NOT EXIST");
mCallback(false, null, null);
return;
}
ab.GetAsset(mAssetName, mASyncLoadAsset, (name_, res_, userdata_, succ_) =>
{
if (mCallback != null)
{
mCallback(succ_, res_, ab);
}
}, null);
}
}, mASyncLoadAB);
return;
}
MFUnityAssetBundleManager.GetInstance().LoadDep(mDeps[mDepsLoadIndex], mASyncLoadAB, mASyncLoadAsset, DepsCallback, null, mAssetBundleName);
}
}
}