/// <summary>
    /// 异步加载一组资源
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="assetBundleName"></param>
    /// <param name="onAssetsLoad"></param>
    public void LoadAssetsFromUrlAsync <T>(string assetBundleName, UnityAction <T[]> onAssetsLoad) where T : UnityEngine.Object
    {
#if UNITY_EDITOR
        if (canSimulation && SimulateAssetBundleInEditor)
        {
            T[] asset = simuationLoader.LoadAssets <T>(assetBundleName);
            onAssetsLoad(asset);
            return;
        }
#endif
        if (activeLoader != null)
        {
            LoadMenu(() =>
            {
                //onAssetsLoad += (x) => { activeLoader.UnloadAssetBundle(assetBundleName); };
                AssetBundleLoadAssetsOperation operation = activeLoader.LoadAssetsAsync(assetBundleName, typeof(T));
                StartCoroutine(WaitLoadObjects(operation, onAssetsLoad));
            });
        }
        else
        {
            Debug.Log("Please Set Menu");
        }
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 从url异步从bundle中加载一组资源
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="assetBundleName"></param>
    /// <param name="assetNames"></param>
    /// <param name="allAssetLoad"></param>
    public void LoadAssetsFromUrlAsync <T>(string assetBundleName, string[] assetNames, UnityAction <T[]> allAssetLoad) where T : UnityEngine.Object
    {
#if UNITY_EDITOR
        if (SimulateAssetBundleInEditor)
        {
            T[] asset = simuationLoader.LoadAssets <T>(assetBundleName, assetNames);
            allAssetLoad(asset);
            return;
        }
#endif
        if (activeLoader != null)
        {
            LoadMenu(() =>
            {
                T[] objectPool = new T[assetNames.Length];
                int j          = 0;


                for (int i = 0; i < assetNames.Length; i++)
                {
                    int index = i;
                    UnityAction <T> loadOnce = (x) =>
                    {
                        objectPool[index] = x;
                        j++;
                        if (j == assetNames.Length)
                        {
                            allAssetLoad(objectPool);
                            activeLoader.UnloadAssetBundle(assetBundleName);
                        }
                    };
                    AssetBundleLoadAssetOperation operation = activeLoader.LoadAssetAsync(assetBundleName, assetNames[index], typeof(T));
                    StartCoroutine(WaitLoadObject(operation, loadOnce));
                }
            });
        }
        else
        {
            Debug.Log("Please Set Menu");
        }
    }