using System.Threading.Tasks; using UnityEngine; namespace Model { public class AssetBundleLoaderAsync : Entity { private AssetBundle assetBundle; private AssetBundleRequest request; private TaskCompletionSource tcs; public AssetBundleLoaderAsync(AssetBundle assetBundle) { this.assetBundle = assetBundle; } public void Update() { if (!this.request.isDone) { return; } TaskCompletionSource t = this.tcs; t.SetResult(true); } public override void Dispose() { if (this.Id == 0) { return; } base.Dispose(); } public async Task LoadAllAssetsAsync() { await InnerLoadAllAssetsAsync(); return this.request.allAssets; } private Task InnerLoadAllAssetsAsync() { this.tcs = new TaskCompletionSource(); this.request = assetBundle.LoadAllAssetsAsync(); return this.tcs.Task; } } }