public async void SetExternal(string path, string file, CallBackDelegate <object, object> mCall, GetDependBundlesFuncDelegate getExternalDependcesFunc) { string assetName = path + file; string[] dependencies = getExternalDependcesFunc(assetName); if (this.mAssetsLoaderAsyncDic.ContainsKey("external/" + assetName)) { Debug.Log("await"); await new WaitUntil(() => mAssetsLoaderAsyncDic.ContainsKey("external/" + assetName) == false && this.resourceCache.ContainsKey("external/" + assetName)); } if (this.resourceCache.ContainsKey("external/" + assetName)) { // Debug.Log(("external/" + assetName)); GameObject obj = GameObject.Instantiate((GameObject)this.resourceCache["external/" + assetName]); this.bundles["external/" + assetName].AddRefObj(obj); // Debug.Log("AddRef" + "external/" + assetName + "Num" + this.bundles["external/" + assetName].RefCount); foreach (var v in dependencies) { if (v != assetName) { if (!SyncResourceManager.CheckSyncAssetManagerLoaded("external/" + v)) { this.bundles["external/" + v].AddRefObj(obj); // Debug.Log("AddRef" + "external/" + v + "Num" + this.bundles["external/" + v].RefCount); } } } mCall(obj, file); // mLua.Call(obj, file); } else { AssetsLoaderAsync assetsLoaderAsync = new AssetsLoaderAsync(); assetsLoaderAsync.SetBundle(this.bundles["external/" + assetName].AssetBundle, "external/" + assetName); mAssetsLoaderAsync.Add(assetsLoaderAsync); mAssetsLoaderAsyncDic["external/" + assetName] = assetsLoaderAsync; GameObject temp = (GameObject)await assetsLoaderAsync.LoadAssetAsync(file); GameObject obj = GameObject.Instantiate(temp); this.bundles["external/" + assetName].AddRefObj(obj); // Debug.Log("AddRef" + "external/" + assetName + "Num" + this.bundles["external/" + assetName].RefCount); foreach (var v in dependencies) { if (v != assetName) { if (!SyncResourceManager.CheckSyncAssetManagerLoaded("external/" + v)) { this.bundles["external/" + v].AddRefObj(obj); // Debug.Log("AddRef" + "external/" + v + "Num" + this.bundles["external/" + v].RefCount); } } } this.bundles["external/" + assetName].AssetBundle.Unload(false); this.resourceCache["external/" + assetName] = temp; mCall(obj, file); //mLua.Call(obj,file); } }
private static async Task LoadAssetAsync(string assetBundleName, AssetBundle assetBundle, Action <float> actionProgress) { // 异步load资源到内存cache住 UnityEngine.Object[] assets; AssetsLoaderAsync assetsLoaderAsync = MonoBehaviourHelper.CreateTempComponent <AssetsLoaderAsync>(); assetsLoaderAsync.SetAB(assetBundle); assets = await assetsLoaderAsync.LoadAllAssetsAsync(actionProgress); Destroy(assetsLoaderAsync.gameObject); }
public async void SetTexture(string path, string file, CallBackDelegate <object, object> mCall) { string assetName = path + file; if (this.mAssetsLoaderAsyncDic.ContainsKey(assetName)) { await new WaitUntil(() => mAssetsLoaderAsyncDic.ContainsKey(assetName) == false && this.resourceCache.ContainsKey(assetName)); } if (this.resourceCache.ContainsKey(assetName)) { System.Type mType = this.resourceCache[assetName].GetType(); if (mType == typeof(Sprite)) { Sprite sprite = (Sprite)this.resourceCache[assetName]; mCall(sprite.texture, null); //mLua.Call(sprite.texture); return; } mCall((Texture)this.resourceCache[assetName], null); // mLua.Call((Texture)this.resourceCache[assetName]); } else { AssetsLoaderAsync assetsLoaderAsync = new AssetsLoaderAsync(); assetsLoaderAsync.SetBundle(this.bundles[path + file].AssetBundle, path + file); mAssetsLoaderAsync.Add(assetsLoaderAsync); mAssetsLoaderAsyncDic[path + file] = assetsLoaderAsync; UnityEngine.Object obj = await assetsLoaderAsync.LoadAssetAsync(file); this.resourceCache[assetName] = obj; System.Type mType = obj.GetType(); this.bundles[path + file].IfTexture = true; if (mType == typeof(Sprite)) { Sprite sprite = (Sprite)obj; mCall(sprite.texture, null); // mLua.Call(sprite.texture); return; } mCall((Texture)obj, null); // mLua.Call((Texture)obj); } }