IEnumerator CoBundleAsyncRequest <T>(BundleAsyncRequest bundleRequest, System.Action <T> callback) where T : IAssetGetter, new() { while (bundleRequest.currRequestID != bundleAsyncs.Peek().currRequestID) { Logger.LogWarp.Log(bundleRequest.currRequestID + " != " + bundleAsyncs.Peek().currRequestID + " waiting..."); yield return(null); } //等待完bundleRequest再次检查有没有被加载过。防止同一资源加载出错 Logger.LogWarp.Log(bundleRequest.currRequestID + " wait finished!"); string bundleName = GetBundleName(bundleRequest.assetName); T getter; if (LoadAssetFromNameAssetHolder(bundleRequest.assetName, bundleName, out getter)) { if (callback != null) { callback(getter); } bundleAsyncs.Dequeue(); yield break; } yield return(CoLoadBundleAsync <T>(bundleRequest.assetName, bundleName, bundleRequest.eLoadAsset, callback)); }
IEnumerator CoBundleAsyncRequest <T>(BundleAsyncRequest bundleRequest, System.Action <T> callback) where T : IAssetGetter, new() { while (bundleRequest.currRequestID != bundleAsyncs.Peek().currRequestID) { yield return(null); } string bundleName = GetBundleName(bundleRequest.assetName); Debug.LogError("[" + bundleName + "] [" + bundleRequest.assetName + "]"); yield return(CoLoadBundleAsync <T>(bundleRequest.assetName, bundleName, bundleRequest.eLoadAsset, callback)); }
void LoadAssetAsync <T>(string assetName, E_LoadAsset eloadAsset, System.Action <T> callback) where T : IAssetGetter, new() { T getter; string bundleName = GetBundleName(assetName); if (LoadAssetFromNameAssetHolder(assetName, bundleName, out getter)) { callback(getter); } //BundleAsyncRequest bundleRequest = new BundleAsyncRequest(assetName, eloadAsset, callback); BundleAsyncRequest bundleRequest = new BundleAsyncRequest(assetName, eloadAsset); bundleAsyncs.Enqueue(bundleRequest); RunCoroutine.Run(CoBundleAsyncRequest <T>(bundleRequest, callback)); }
void LoadAssetAsync <T>(string assetName, E_LoadAsset eloadAsset, System.Action <T> callback) where T : IAssetGetter, new() { T getter; string bundleName = GetBundleName(assetName); if (LoadAssetFromNameAssetHolder(assetName, bundleName, out getter)) { if (callback != null) { callback(getter); } return; } BundleAsyncRequest bundleRequest = new BundleAsyncRequest(assetName, eloadAsset); Logger.LogWarp.Log(assetName + " request " + bundleRequest.currRequestID); bundleAsyncs.Enqueue(bundleRequest); RunCoroutine.Run(CoBundleAsyncRequest <T>(bundleRequest, callback)); }