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); } } }