static AsyncOperationSet GetAssetBundleRequestTable(AssetBundle assetBundle, AssetEntryRecord assetEntryRecord) { string assetName = assetBundle.GetAllAssetNames().FirstOrDefault(); AssetBundleRequest request = assetBundle.LoadAssetAsync(assetName); return(AsyncOperationSet.CreateByAssetBundleRequest(request)); }
static AsyncOperationSet GetAssetBundleRequestSceneAdditive(AssetBundle assetBundle, AssetEntryRecord assetEntryRecord) { string sceneName = AssetBundleUtility.GetSceneName(assetEntryRecord.AssetName); AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); return(AsyncOperationSet.CreateByAsyncOperation(operation)); }
static AsyncOperationSet GetAssetBundleRequestMultiple <T>(AssetBundle assetBundle, AssetEntryRecord assetEntryRecord) where T : UnityEngine.Object { string assetName = assetEntryRecord.AssetName; AssetBundleRequest request = assetBundle.LoadAssetWithSubAssetsAsync <T>(assetName); return(AsyncOperationSet.CreateByAssetBundleRequest(request)); }
IEnumerator GetAsset <T>( int loadingTaskId, AssetEntryRecord assetEntryRecord, IReadOnlyList <AssetBundleRecord> necessaryAssetBundleRecords, Action <T> onLoaded, Func <AssetBundle, AssetEntryRecord, AsyncOperationSet> getAssetbundleRequestFunc, Func <AssetBundleRequest, T> getAssetFunc) { if (assetEntryRecord == null) { errorReceiver.OnError(AssetBundleErrorCode.MissingAssetEntryRecord, $"null asset entry record"); yield break; } AssetBundle assetBundle = loadedAssetBundles.GetValue(assetEntryRecord.AssetBundleName); if (assetBundle == null) { errorReceiver.OnError(AssetBundleErrorCode.MissingAssetBundleName, $"cannot get asset bundle: AssetEntryKey={assetEntryRecord.AssetEntryKey}, AssetBundleName={assetEntryRecord.AssetBundleName}"); yield break; } AsyncOperationSet asyncOperationSet = getAssetbundleRequestFunc.Invoke(assetBundle, assetEntryRecord); AsyncOperation asyncOperation = asyncOperationSet.AsyncOperation; while (!asyncOperation.isDone) { yield return(null); } AssetBundleRequest assetBundleRequest = asyncOperationSet.AssetBundleRequest; T asset = getAssetFunc.Invoke(assetBundleRequest); if (assetBundleRequest != null && asset == null) { errorReceiver.OnError(AssetBundleErrorCode.FailureToRemoveTaskId, $"cannot get asset: AssetEntryKey={assetEntryRecord.AssetEntryKey}, AssetBundleName={assetEntryRecord.AssetBundleName}, AssetName={assetEntryRecord.AssetName}"); yield break; } while (this.IsPaused || TimeUtility.DropFrameExists()) { yield return(null); } onLoaded?.Invoke(asset); FinishLoadingTask(loadingTaskId, necessaryAssetBundleRecords); }