/// <summary>
    /// 开始加载资源。
    /// </summary>
    /// <param name="loadList"></param>
    /// <param name="loaded"></param>
    /// <returns></returns>
    private IEnumerator StartLoadAsset(LoadListInfo loadList, System.Action <AssetBundleInfo> loaded)
    {
        while (true)
        {
            if (loadList.Download != null)
            {
                loadList.Download.Dispose();
            }
            string path = loadList.Next;
            LoggerHelper.Debug("path" + path);
            var key = Utils.GetFileName(path);
            LoggerHelper.Debug("key" + key);
            var info = m_allRecources[path];
            if (info.Asset == null)                                                                              //再次验证资源是否已加载
            {
                var temp = string.Concat(SystemConfig.ASSET_FILE_HEAD, path, SystemConfig.ASSET_FILE_EXTENSION); //拼资源路径
                temp = temp.Replace("\\", "/");
                LoggerHelper.Debug(temp);
                loadList.Download = new WWW(temp);
                yield return(loadList.Download);//异步加载资源

                //加载完成后缓存起资源引用
                info.Asset = loadList.Download.assetBundle;
            }
            //info.ReferenceCount = 1;
            //LoggerHelper.Debug(key + loadList.Index);
            if (!loadList.HasNext)//加载完成后回调加载完成事件
            {
                var assetInfo = m_assetBundleDic[loadList.Root];
                try
                {
                    if (loaded != null)
                    {
                        loaded(assetInfo);
                    }
                }
                catch (System.Exception ex)
                {
                    LoggerHelper.Except(ex);
                }
                ContinueLoad();
                yield break;
            }
        }
    }
    /// <summary>
    /// 加载资源
    /// </summary>
    /// <param name="prefab"></param>
    /// <param name="loaded"></param>
    private void LoadAssetBundleInfo(string prefab, System.Action <AssetBundleInfo> loaded)
    {
        AssetBundleInfo assetBundleInfo;
        var             flag = m_assetBundleDic.TryGetValue(prefab, out assetBundleInfo);

        if (flag)
        {
            if (assetBundleInfo.Asset != null)
            {//资源已加载,直接回调
                //LoggerHelper.Debug("resource loaded: " + assetBundleInfo.Path);
                loaded(assetBundleInfo);
            }
            else
            {
                LoadListInfo loadList = new LoadListInfo();
                loadList.Root = prefab;
                //LoggerHelper.Debug(prefab);
                loadList.LoadList = new List <string>();
                loadList.LoadList.AddRange(GetAllFile(assetBundleInfo));//获取加载资源列表
                //LoggerHelper.Debug(loadList.LoadList.Count);

                LoggerHelper.Debug("FileCount: " + loadList.LoadList.Count);
                if (m_isLoading)
                {
                    //LoggerHelper.Debug("m_resourceLoadQueue Enqueue: " + assetBundleInfo.Path + m_resourceLoadQueue.Count);
                    lock (m_resourceLoadQueueLocker)
                        m_resourceLoadQueue.Enqueue(() => { StartCoroutine(StartLoadAsset(loadList, loaded)); });
                }
                else
                {
                    m_isLoading = true;
                    StartCoroutine(StartLoadAsset(loadList, loaded));
                }
            }
        }
        else
        {
            LoggerHelper.Warning(prefab + " does not exist.");
        }
    }
    /// <summary>
    /// 开始加载资源。
    /// </summary>
    /// <param name="loadList"></param>
    /// <param name="loaded"></param>
    /// <returns></returns>
    private IEnumerator StartLoadAsset(LoadListInfo loadList, System.Action<AssetBundleInfo> loaded)
    {
        while (true)
        {
            if (loadList.Download != null)
                loadList.Download.Dispose();
            string path = loadList.Next;
            LoggerHelper.Debug("path" + path);
            var key = Utils.GetFileName(path);
            LoggerHelper.Debug("key" + key);
            var info = m_allRecources[path];
            if (info.Asset == null)//再次验证资源是否已加载
            {
                var temp = string.Concat(SystemConfig.ASSET_FILE_HEAD, path, SystemConfig.ASSET_FILE_EXTENSION);//拼资源路径
                temp = temp.Replace("\\", "/");
                LoggerHelper.Debug(temp);
                loadList.Download = new WWW(temp);
                yield return loadList.Download;//异步加载资源

                //加载完成后缓存起资源引用
                info.Asset = loadList.Download.assetBundle;
            }
            //info.ReferenceCount = 1;
            //LoggerHelper.Debug(key + loadList.Index);
            if (!loadList.HasNext)//加载完成后回调加载完成事件
            {
                var assetInfo = m_assetBundleDic[loadList.Root];
                try
                {
                    if (loaded != null)
                        loaded(assetInfo);
                }
                catch (System.Exception ex)
                {
                    LoggerHelper.Except(ex);
                }
                ContinueLoad();
                yield break;
            }
        }
    }
    /// <summary>
    /// 加载资源
    /// </summary>
    /// <param name="prefab"></param>
    /// <param name="loaded"></param>
    private void LoadAssetBundleInfo(string prefab, System.Action<AssetBundleInfo> loaded)
    {
        AssetBundleInfo assetBundleInfo;
        var flag = m_assetBundleDic.TryGetValue(prefab, out assetBundleInfo);
        if (flag)
        {
            if (assetBundleInfo.Asset != null)
            {//资源已加载,直接回调
                //LoggerHelper.Debug("resource loaded: " + assetBundleInfo.Path);
                loaded(assetBundleInfo);
            }
            else
            {
                LoadListInfo loadList = new LoadListInfo();
                loadList.Root = prefab;
                //LoggerHelper.Debug(prefab);
                loadList.LoadList = new List<string>();
                loadList.LoadList.AddRange(GetAllFile(assetBundleInfo));//获取加载资源列表
                //LoggerHelper.Debug(loadList.LoadList.Count);

                LoggerHelper.Debug("FileCount: " + loadList.LoadList.Count);
                if (m_isLoading)
                {
                    //LoggerHelper.Debug("m_resourceLoadQueue Enqueue: " + assetBundleInfo.Path + m_resourceLoadQueue.Count);
                    lock (m_resourceLoadQueueLocker)
                        m_resourceLoadQueue.Enqueue(() => { StartCoroutine(StartLoadAsset(loadList, loaded)); });
                }
                else
                {
                    m_isLoading = true;
                    StartCoroutine(StartLoadAsset(loadList, loaded));
                }
            }
        }
        else
        {
            LoggerHelper.Warning(prefab + " does not exist.");
        }
    }