/// <summary>
    /// 取消加载
    /// 如果正在加载中 加载成功之后会卸载,同时回调也不会触发
    /// </summary>
    /// <param name="requestId"></param>
    /// <returns></returns>
    public static void CancelLoadAssetAsync(int requestId)
    {
        LoadAssetInfo loadAssetInfo = GetLoadAssetInfo(requestId);

        if (loadAssetInfo == null)
        {
            return;
        }

        // 等待加载状态中 直接回收(如果不回收将会先加载在卸载)
        if (loadAssetInfo.step == LoadAssetStep.LoadWait)
        {
            RecoveryLoadAssetInfo(loadAssetInfo);
        }
        else
        {
            PendingLoadAssetInfo pendingLoadAssetInfo = _pendingLoadAssetInfoList[loadAssetInfo.bundleName];
            // 资源还未加载 因为在加载依赖的bundle
            if (pendingLoadAssetInfo != null)
            {
                // 取消依赖加载bundle
                RequestLoadBundle.CancelLoadBundleAsync(pendingLoadAssetInfo.reqeustId);
                RecoveryPendingLoadAssetInfo(pendingLoadAssetInfo);
                // 这时资源还未加载 直接回收
                RecoveryLoadAssetInfo(loadAssetInfo);
            }
        }
    }
    /// <summary>
    /// bundle成功加载后的回调
    /// </summary>
    /// <param name="bundleName"></param>
    /// <param name="assetBundle"></param>
    /// <param name="abRequestId"></param>
    private static void OnLoadPeningBundle(string bundleName, AssetBundle assetBundle, int abRequestId)
    {
        if (bundleName != assetBundle.name)
        {
            return;
        }
        PendingLoadAssetInfo peningInfo = _pendingLoadAssetInfoList[bundleName];

        if (peningInfo == null)
        {
            return;
        }

        foreach (LoadAssetInfo loadAssetInfo in _loadAssetInfoList)
        {
            if (loadAssetInfo.bundleName == bundleName)
            {
                // 进入加载资源状态
                loadAssetInfo.assetBundle = assetBundle;
                LoadAssetAsync(loadAssetInfo);
            }
        }
        // 回收依赖信息
        RecoveryPendingLoadAssetInfo(peningInfo);
    }
 /// <summary>
 /// 回收依赖加载信息
 /// </summary>
 /// <param name="info"></param>
 private static void RecoveryPendingLoadAssetInfo(PendingLoadAssetInfo info)
 {
     if (info == null)
     {
         return;
     }
     info.Clear();
     _freePendingLoadAssetInfoList.Add(info);
 }
    /// <summary>
    /// 回收依赖加载信息
    /// </summary>
    /// <param name="info"></param>
    private static void RecoveryPendingLoadAssetInfo(PendingLoadAssetInfo info)
    {
        if (info == null)
        {
            return;
        }

        if (_pendingLoadAssetInfoList.ContainsKey(info.bundleName))
        {
            _pendingLoadAssetInfoList.Remove(info.bundleName);
        }

        info.Clear();
        _freePendingLoadAssetInfoList.Add(info);
    }
    /// <summary>
    /// 获取依赖加载信息
    /// </summary>
    /// <returns></returns>
    private static PendingLoadAssetInfo GetTempPendingLoadAssetInfo()
    {
        PendingLoadAssetInfo assetInfo = null;

        if (_freePendingLoadAssetInfoList.Count > 0)
        {
            assetInfo = _freePendingLoadAssetInfoList[0];
            _freePendingLoadAssetInfoList.RemoveAt(0);
        }
        else
        {
            assetInfo = new PendingLoadAssetInfo();
        }

        return(assetInfo);
    }
    /// <summary>
    ///依赖bundle加载状态
    /// </summary>
    /// <param name="loadAssetInfo"></param>
    private static void PushPending(LoadAssetInfo loadAssetInfo)
    {
        EnterLoadDepend(loadAssetInfo);
        string bundleName = loadAssetInfo.bundleName;

        if (!_pendingLoadAssetInfoList.ContainsKey(bundleName))
        {
            // 加载bundle
            int abRequestId = ResourceUtils.CreateAssetBundleAsync(bundleName, OnLoadPeningBundle);
            PendingLoadAssetInfo pendingInfo = new PendingLoadAssetInfo();
            pendingInfo            = GetTempPendingLoadAssetInfo();
            pendingInfo.reqeustId  = abRequestId;
            pendingInfo.bundleName = bundleName;
            _pendingLoadAssetInfoList.Add(bundleName, pendingInfo);
        }
    }