Example #1
0
    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);
        }
    }
Example #2
0
    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);
    }
Example #3
0
    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);
        }
    }