Example #1
0
        static AsyncOperationSet GetAssetBundleRequestTable(AssetBundle assetBundle, AssetEntryRecord assetEntryRecord)
        {
            string             assetName = assetBundle.GetAllAssetNames().FirstOrDefault();
            AssetBundleRequest request   = assetBundle.LoadAssetAsync(assetName);

            return(AsyncOperationSet.CreateByAssetBundleRequest(request));
        }
Example #2
0
        static AsyncOperationSet GetAssetBundleRequestSceneAdditive(AssetBundle assetBundle, AssetEntryRecord assetEntryRecord)
        {
            string         sceneName = AssetBundleUtility.GetSceneName(assetEntryRecord.AssetName);
            AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);

            return(AsyncOperationSet.CreateByAsyncOperation(operation));
        }
Example #3
0
        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));
        }
Example #4
0
        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);
        }