/// <summary> /// 异步加载资源 /// </summary> /// <param name="assetKey"></param> /// <param name="callback"></param> public void LoadAssetAsync(AssetKey assetKey, Action <AssetKey, UnityEngine.Object> callback) { MDebug.Log(LOG_TAG, $"LoadAssetAsync({assetKey})"); MDebug.Assert(callback != null, LOG_TAG, "callback != null"); int assetIndex = (int)assetKey; AssetHandler assetHandler = m_AssetHandlers[assetIndex]; if (assetHandler == null) { assetHandler = m_AssetHandlerPool.Alloc(); assetHandler.SetAssetKey(assetKey); m_AssetHandlers[assetIndex] = assetHandler; } AssetAction assetAction = assetHandler.AddReference(callback); switch (assetAction) { case AssetAction.RequestLoadBundle: int bundleIndex = m_AssetInfos[assetIndex].BundleIndex; int[] dependencyBundleIndexs = m_BundleInfos[bundleIndex].DependencyBundleIndexs; for (int iBundle = 0; iBundle < dependencyBundleIndexs.Length; iBundle++) { int iterDependencyBundleIndex = dependencyBundleIndexs[iBundle]; LoadBundleForLoadAsset(iterDependencyBundleIndex, assetIndex); } LoadBundleForLoadAsset(bundleIndex, assetIndex); //全部依赖Bundle加载完成? if (assetHandler.GetRemainLoadBundleCount() == 0) { AddAssetActionRequest(assetIndex, AssetAction.Load); } break; case AssetAction.Load: case AssetAction.LoadedCallback: AddAssetActionRequest(assetIndex, assetAction); break; case AssetAction.Null: // Nothing To Do break; default: MDebug.Assert(false, LOG_TAG, "Asset Not Support AssetAction: " + assetAction); break; } }