示例#1
0
    static void ResLoadCallBack(ResConfigData cof, ResNode res, System.Object UserDataObj)
    {
        SkinModelInfo info = UserDataObj as SkinModelInfo;

        if (null == info)
        {
            Debug.LogError("皮肤异步加载严重错误--ResLoadCallBack");
            return;
        }

        Skin sk = null;

        if (m_SkinMap.TryGetValue(info.nSkinID, out sk))
        {
            //已经有这个皮肤,不加载了,这种情况是被同步冲掉了
            if (sk.isValid)
            {
                return;
            }
        }

        //if(null == res || !res.IsValid())
        //{
        //    RemoveAllCallBack(info.nSkinID);
        //}
        BuildSkin(info, res, true);
    }
示例#2
0
    /// <summary>
    /// 加载模型
    /// </summary>
    /// <param name="SkinID">模型ID</param>
    /// <param name="strPrefabPath">模型路径</param>
    /// <returns>是否成功</returns>
    private static Skin LoadSkinSynchronous(SkinModelInfo info)
    {
        Skin reslut = null;

        //已经有这个皮肤,不加载了
        if (m_SkinMap.TryGetValue(info.nSkinID, out reslut))
        {
            return(reslut);
        }


        ResNode obj = AssetBundleManager.GetAssets(AssetType.Asset_Prefab, info.strPatch);

        if (null != obj)
        {
            reslut = BuildSkin(info, obj, obj.isAsync);
            if (reslut != null)
            {
                reslut.AddRef();
                SkinAsyncLoadingObj asyncObj = null;
                if (m_AsyncLoadSkinRequestTable.TryGetValue(info.nSkinID, out asyncObj))
                {
                    reslut.AddRef(asyncObj.ReferenceCount);
                    asyncObj.ReferenceCount = 0;
                }
            }
            return(reslut);
        }
        else
        {
            obj = null;
            Trace.Warning("加载皮肤模型失败,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请[--策划--]检查配置");
            return(reslut);
        }
    }
示例#3
0
    private static SkinModelInfo GetSkinInfoFromEntityViewItem(EntityViewItem ite)
    {
        SkinModelInfo inf = new SkinModelInfo();

        inf.nSkinID    = ite.nSkinID;
        inf.strPatch   = ite.szModelPath;
        inf.SkinType   = (ENTITY_TYPE)ite.EntityType;
        inf.fSkinScale = ite.fSkinScale;
        return(inf);
    }
示例#4
0
    /// <summary>
    /// 加载皮肤
    /// </summary>
    /// <param name="ite">实体信息</param>
    /// <returns></returns>
    public static bool LoadSkin(EntityViewItem ite)
    {
        SkinModelInfo info = GetSkinInfoFromEntityViewItem(ite);

        if (m_SkinConfigMap.ContainsKey(info.nSkinID))
        {
            Trace.LogWarning("加载皮肤模型重复,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请请[--策划--]删除重复的ID");
            return(true);
        }
        m_SkinConfigMap.Add(info.nSkinID, info);
        return(true);
    }
示例#5
0
    private static Skin BuildSkin(SkinModelInfo info, ResNode obj, bool isAsync)
    {
        Skin sk = null;

        if (!m_SkinMap.TryGetValue(info.nSkinID, out sk))
        {
            sk         = new Skin();
            sk.nSkinID = info.nSkinID;
            m_SkinMap.Add(info.nSkinID, sk);
        }

        if (obj != null)
        {
            sk.SkinType     = info.SkinType;
            sk.fSkinScale   = info.fSkinScale;
            sk.ResSkinObj   = obj;
            sk.isStaticSkin = info.strPatch.Contains(staticSkinPatch);
            sk.isAsync      = isAsync;
            if (!CheckSkinValid(sk))
            {
                if (!isAsync)
                {
                    AssetBundleManager.DeleteAssets(ref obj, ImmdieateUnLoadSkin);
                }
                else
                {
                    AssetBundleManager.DeleteAssetsAsync(ref obj, ResLoadCallBack, ImmdieateUnLoadSkin);
                }
                sk.isValid = false;
                obj        = null;
                return(sk);
            }

            sk.isValid = true;
            obj        = null;
            return(sk);
        }
        else
        {
            sk.isValid = false;
            Debug.LogWarning("加载皮肤模型失败,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请[--策划--]检查配置");
            return(null);
        }
    }
示例#6
0
    /// <summary>
    /// 取得皮肤
    /// </summary>
    /// <param name="SkinID"></param>
    /// <param name="sk"></param>
    /// <returns></returns>
    public static SkinInstance GetSkin(int SkinID)
    {
        if (null == m_SkinConfigMap)
        {
            return(null);
        }

        Skin Reslut = null;

        Reslut = GetSkinFromCache(SkinID);
        if (Reslut != null)
        {
            Reslut.AddRef();
            m_SkinMap.Add(Reslut.nSkinID, Reslut);
            return(Reslut.Instantiate_Main());
        }

        //先看看这个皮肤是不是有这个皮肤
        if (m_SkinConfigMap.ContainsKey(SkinID))
        {
            //再看看这个皮肤是否被加载了
            if (m_SkinMap.ContainsKey(SkinID))
            {
                Reslut = m_SkinMap[SkinID];
                Reslut.AddRef();
                return(Reslut.Instantiate_Main());
            }

            //没有就加载皮肤
            SkinModelInfo info = m_SkinConfigMap[SkinID];
            Skin          sk   = LoadSkinSynchronous(info);
            if (null != sk && sk.isValid)
            {
                return(sk.Instantiate_Main());
            }
            return(null);
        }
        else
        {
            Trace.LogWarning("找不到皮肤配置,ID:" + SkinID);
        }
        return(null);
    }
示例#7
0
    /// <summary>
    /// 异步取得Skin
    /// </summary>
    /// <param name="SkinID"></param>
    /// <param name="CallBack"></param>
    /// <returns></returns>
    private static bool GetSkinAsyncImpl(int SkinID, System.Action <Skin> CallBack, AssetLoadPriority priority = AssetLoadPriority.Priority_Normal)
    {
        SkinModelInfo info = null;

        if (!m_SkinConfigMap.TryGetValue(SkinID, out info))
        {
            Debug.LogWarning("找不到皮肤配置,ID:" + SkinID);
            return(false);
        }
        Skin sk = null;
        SkinAsyncLoadingObj loadingObj = null;

        sk = GetSkinFromCache(SkinID);
        if (sk != null)
        {
            sk.AddRef();
            m_SkinMap.Add(sk.nSkinID, sk);

            if (m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out loadingObj))
            {
                loadingObj.callbackList.Add(CallBack);
            }
            else
            {
                loadingObj = new SkinAsyncLoadingObj();
                loadingObj.callbackList.Add(CallBack);
                m_AsyncLoadSkinRequestTable.Add(SkinID, loadingObj);
            }

            return(true);
        }


        if (m_SkinMap.TryGetValue(SkinID, out sk))
        {
            if (m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out loadingObj))
            {
                sk.AddRef();
                loadingObj.callbackList.Add(CallBack);
            }
            else
            {
                loadingObj = new SkinAsyncLoadingObj();
                loadingObj.callbackList.Add(CallBack);
                sk.AddRef();
                m_AsyncLoadSkinRequestTable.Add(SkinID, loadingObj);
            }
            return(true);
        }


        if (m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out loadingObj))
        {
            loadingObj.ReferenceCount++;
            loadingObj.callbackList.Add(CallBack);
        }
        else
        {
            ResNode obj = AssetBundleManager.GetAssetsAsync(AssetType.Asset_Prefab, ResLoadCallBack, info.strPatch, false, info, priority);
            if (obj != null)
            {
                loadingObj = new SkinAsyncLoadingObj();
                loadingObj.callbackList.Add(CallBack);
                loadingObj.ReferenceCount++;
                loadingObj.loadingResNode = obj;
                m_AsyncLoadSkinRequestTable.Add(SkinID, loadingObj);
            }
            else
            {
                Trace.Warning("加载皮肤模型失败,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请[--策划--]检查配置");
                return(false);
            }
        }
        return(true);
    }