IEnumerator WaitLoadObjects <T>(AssetBundleLoadAssetsOperation operation, UnityAction <T[]> onLoad) where T : UnityEngine.Object
    {
        yield return(operation);

        if (onLoad != null)
        {
            T[] asset = operation.GetAssets <T>();
            onLoad.Invoke(asset);
        }
    }
    /// <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");
        }
    }