/// <summary>
    /// 计算资源回调,他们的res和cofig是一样的,只是userdataobj与回调不一样
    /// </summary>
    /// <param name="res"></param>
    /// <param name="config"></param>
    /// <param name="callBack"></param>
    /// <param name="userDataObj"></param>
    private static void GeneratePrefabCallBack(ResNode res, UnionResConfigData config, System.Action <ResConfigData, ResNode, System.Object> callBack, System.Object userDataObj)
    {
        List <AsyncLoadingObject> requestObjList = null;

        AsyncLoadingObject AnsycObj = BuildCallBackObj(res, config, callBack, userDataObj);

        if (m_PrefabRequestTable.TryGetValue(res.instanceID, out requestObjList))
        {
            requestObjList.Add(AnsycObj);
        }
        else
        {
            requestObjList = new List <AsyncLoadingObject>();
            requestObjList.Add(AnsycObj);
            m_PrefabRequestTable.Add(res.instanceID, requestObjList);
        }
    }
    /// <summary>
    /// 更新预制体的加载进度
    /// </summary>
    private static void UpdatePrefabAsyncLoadingProgress()
    {
        AsyncDependenicesLoadCompleteList.Clear();
        AsyncDependenicesLoadInValidList.Clear();
        foreach (KeyValuePair <int, List <ResNode> > pair in m_DependenicesRequestTable)
        {
            List <ResNode> nodList           = pair.Value;
            bool           isLoadFinish      = true;
            bool           isHaveInvalidNode = false;
            foreach (ResNode nod in nodList)
            {
                if (!nod.isLoadFinish)
                {
                    isLoadFinish = false;
                    break;
                }
                else
                {
                    if (!nod.IsValid())
                    {
                        isHaveInvalidNode = true;
                    }
                }
            }

            if (isLoadFinish)
            {
                AsyncDependenicesLoadCompleteList.Add(pair.Key);
                if (isHaveInvalidNode)
                {
                    AsyncDependenicesLoadInValidList.Add(pair.Key);
                }
            }
        }

        foreach (int s in AsyncDependenicesLoadCompleteList)
        {
            m_DependenicesRequestTable[s].Clear();
            m_DependenicesRequestTable[s] = null;
            m_DependenicesRequestTable.Remove(s);

            ////依赖加载完了之后,发现预制已经不需要了,直接卸载依赖
            //if (m_NeedToDeletePrefab.Contains(s))
            //{
            //    UnLoadDependenicesAsync(s);
            //    m_NeedToDeletePrefab.Remove(s);
            //    continue;
            //}

            List <AsyncLoadingObject> list = m_PrefabRequestTable[s];

            if (m_AsyncLoadingDependicensPrefabResNode.ContainsKey(s))
            {
                m_AsyncLoadingDependicensPrefabResNode.Remove(s);
            }

            //发现加载的依赖项有无效的资源节点,那么不进行下面的预制体本体加载
            //但是,还是要进行回调,因为这个是属于加载失败.
            if (AsyncDependenicesLoadInValidList.Contains(s))
            {
                m_PrefabRequestTable.Remove(s);
                UnLoadDependenicesAsync(s);

                ResNode res = AllocResNode(list[0].loadingResInstanceID);
                m_PrefabResTable.Add(s, res);
                res.status = ResNodeStatus.LoadFinish;
                foreach (AsyncLoadingObject obj in list)
                {
                    obj.callBack(obj.configData, res, obj.UserDataObj);
                }
                list.Clear();

                continue;
            }

            AsyncLoadingObject alo            = list[0];
            ResNode            loadingResNode = AllocResNode(alo.loadingResInstanceID);
            UnionResConfigData config         = alo.configData as UnionResConfigData;
            GetPrefabResourceAsync(ref loadingResNode, config, PrefabResourceCallBack, config.priority);
            list[0] = alo;
        }
    }