// 检查所有效果数量有没有超出值
        protected void CheckMaxEffectCount(UEffectPrefabType _eType)
        {
            int count = 0;

            m_dicEffectPrefabTypeUsed.Select(x => x.Value).ToList().ForEach(x => { count += x.RefferenceList.Count; });
            if (count > MaxEffectPrefabReffCount)
            {
                StringBuilder tmpSB  = new StringBuilder();
                StringBuilder tmpSB1 = new StringBuilder();

                foreach (KeyValuePair <UEffectPrefabType, UEffectDataLoadParam> kp in m_dicEffectPrefabTypeUsed)
                {
                    tmpSB.Append(string.Format("<tr><td>{0}</td><td>{1}</td></tr>", kp.Key, kp.Value.RefferenceList.Count));
                }

                tmpSB1.Append("<details>");
                tmpSB1.Append("<summary>所有效果类型预制体数量超过限定值:{0},当前值:{1},看是否需要优化下</summary>");
                tmpSB1.Append("<table border='1'><tbody align='center'>");
                tmpSB1.Append("<tr><th> UI特效类型 </th><th> 实例数量 </th></tr>{2}");
                tmpSB1.Append("</tbody></table>");
                tmpSB1.Append("</details>");

                Trace.LogWarning(string.Format(tmpSB1.ToString(), MaxEffectPrefabReffCount, count, tmpSB.ToString()));
            }


            if (m_dicEffectPrefabTypeUsed[_eType].RefferenceList.Count >= MaxPrefabTypeRefCount)
            {
                Trace.LogWarning("效果类型:" + _eType + " 的引用数量超过了" + MaxPrefabTypeRefCount + "是不是哪里有问题?");
            }
        }
示例#2
0
 /// <summary>
 /// 添加效果参数列表
 /// </summary>
 /// <param name="_eType">类型</param>
 /// <param name="_tfAttachParent">挂接对象</param>
 /// <param name="_vAttachPosition">挂接后显示坐标(相对挂接对象)</param>
 /// <param name="_vAttachRotation">挂节后旋转角度(相对挂接对象)</param>
 public UEffectPrefabParam(UEffectPrefabType _eType, Transform _tfAttachParent, Vector3?_vAttachPosition = null, float?_fAttachRotation = null, bool _bAutoDestroy = false, bool _bIsDestroyRes = false)
     : base(_tfAttachParent)
 {
     AttachEffectType = _eType;
     AttachParent     = _tfAttachParent;
     AttachPosition   = _vAttachPosition;
     AttachRotation   = _fAttachRotation;
     AutoDestroy      = _bAutoDestroy;
     IsDestroyRes     = _bIsDestroyRes;
 }
        //Manager内部调Node的注册方法
        private void RegisterEffectPrefabNode(UEffectNode _nodeRegister, UEffectPrefabType _eType)
        {
            var _node = _nodeRegister.To <UEffectNodeData_Prefab>();

            if (_node != null)
            {
                _node.EffectType         = _eType;
                _node.EffectPrefabTypeID = CalculateEffectPrefabRefID(_eType);

                m_dicEffectPrefabTypeUsed[_eType].RefferenceList.Add(_nodeRegister.gameObject);

                CheckMaxEffectCount(_eType);
            }
        }
        public void UnRegisterEffectPrefabNode(UEffectNode _nodeUnRegister, UEffectPrefabType _eType)
        {
            //有效果实例移除,减一下引用计数
            if (m_dicEffectPrefabTypeUsed.ContainsKey(_eType) && m_dicEffectPrefabTypeUsed[_eType].RefferenceList.Contains(_nodeUnRegister.gameObject))
            {
                m_dicEffectPrefabTypeUsed[_eType].RefferenceList.Remove(_nodeUnRegister.gameObject);
            }
            //如果有延时效果,在计时还没开始就要结束的话也移除下
            int nTimerID = (int)EEffectTimer.EET_Delay * MaxTimerIDCount + _nodeUnRegister.To <UEffectNodeData_Prefab>().EffectPrefabTypeID;

            if (m_dicTimerIDObject.ContainsKey(nTimerID))
            {
                TimerManager.KillTimer(this, nTimerID);
                m_dicTimerIDObject.Remove(nTimerID);
            }
        }
        //异步加载
        protected ResNode AsyncLoadEffectPrefab(UEffectPrefabParam _effectParam)
        {
            UEffectPrefabType _eType = _effectParam.AttachEffectType;

            if (!m_dicEffectDataTable.ContainsKey(_eType))
            {
                Trace.LogWarning("UI效果资源数据容器 没有类型:" + _eType + " 的数据");
                return(null);
            }
            UEffectDataLoadParam data = null;

            {
                //var resNode = AssetBundleManager.GetAssets(AssetType.Asset_Prefab, UPath.UArtistEffectPath + m_dicEffectDataTable[_eType].EffectPath);

                ResNodeHandleParamBase param = new ResNodeHandleParam_Path(AssetType.Asset_Prefab, UPath.UArtistEffectPath + m_dicEffectDataTable[_eType].EffectPath);

                ResNode resNode = AssetBundleManager.GetResNodeAsync(this, param, this, _effectParam);


                if (resNode == null)
                {
                    Trace.LogError("无法取资源:" + UPath.UArtistEffectPath + m_dicEffectDataTable[_eType].EffectPath);
                    return(null);
                }
                //AssetBundleManager.SaveMemory(resNode);
                //当前使用的效果类型超出了限定值,先移除下无效的记录
                if (m_dicEffectPrefabTypeUsed.Count >= MaxEffectPrefabTypeCount)
                {
                    ClearUnusedEffectPrefabType();
                }
                data = new UEffectDataLoadParam(resNode);
                m_dicEffectPrefabTypeUsed.Add(_eType, data);
            }

            _effectParam.EffectRes = data.RefferencePrefabResNode;
            return(data.RefferencePrefabResNode);
        }
示例#6
0
        public void SetTalentUpdateCanUseEffect()
        {
            if (m_OldEffectParam != null)
            {
                m_OldEffectParam.EffectGameObject.SetActive(true);
                return;
            }

            UEffectPrefabType effectType = UEffectPrefabType.UEPT_UHeroTalent_TalentOpenButtonEffect;

            // 看玩家是否是新手(角色等级小于3级)
            if (LogicDataCenter.playerSystemDataManager.GetActorPlayerInfo().playerInfo.nLv < 3)
            {
                effectType = UEffectPrefabType.UEPT_UHeroTalent_TalentOpenButtonEffectForNewbie;
            }

            UEffectParamBase param = new UEffectPrefabParam(_eType: effectType, _tfAttachParent: this.LearnTalentHintEffect.transform);

            UEffectManager.Instance.CreateEffect(UEffectType.UET_EffectPrefab, ref param);

            m_OldEffectParam = (UEffectPrefabParam)param;

            m_OldEffectParam.EffectGameObject.SetActive(true);
        }
示例#7
0
        public void SetData(int nParam, ECupPrizeType eType = ECupPrizeType.ECPT_Personal, UEffectPrefabType effectType = UEffectPrefabType.UEPT_None, bool bShowPrizeDes = true)
        {
            string sGold = ULocalizationService.Instance.Get("UIView", "LegendCupPrize", "Gold");
            string sExp  = ULocalizationService.Instance.Get("UIView", "LegendCupPrize", "Exp");

            BaseIcon.gameObject.SetActive(false);

            if (eType == ECupPrizeType.ECPT_Gold)
            {
                PrizeIcon.sprite = GetPrizeIconSprite((int)EPrizeIconType.EPIT_Gold);
                PrizeDes.text    = nParam + sGold;
                toolTip.SetText(UTooltipParamName.BodyText, nParam + sGold);
            }
            else if (eType == ECupPrizeType.ECPT_Exp)
            {
                PrizeIcon.sprite = GetPrizeIconSprite((int)EPrizeIconType.EPIT_ActorExp);
                PrizeDes.text    = nParam + sExp;
                toolTip.SetText(UTooltipParamName.BodyText, nParam + sExp);
            }
            else if (eType == ECupPrizeType.ECPT_Personal)
            {
                // 与商城奖励图标一致
                SSchemeActorPrizeConfig prizeConfig = ActorPrizeConfig.Instance.GetActorPrizeConfig(nParam);
                if (prizeConfig == null)
                {
                    return;
                }

                if (prizeConfig.nPrizeType == (int)EMActorPrizeType.ACTOR_PRIZE_HERO)
                {
                    PrizeIcon.sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_POINTSHOP, 1, 3, prizeConfig.nPrizeParam[0]);
                }
                else if (prizeConfig.nPrizeType == (int)EMActorPrizeType.ACTOR_PRIZE_HEROCARD)
                {
                    PrizeIcon.sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_POINTSHOP, 1, 7, prizeConfig.nPrizeParam[0]);
                    BaseIcon.gameObject.SetActive(true);
                }
                else if (prizeConfig.nPrizeType == (int)EMActorPrizeType.ACTOR_PRIZE_RUNE)
                {
                    SSchemeRuneConfig runeConfig = RunePage.Instance.allRunePageTable[prizeConfig.nPrizeParam[0]] as SSchemeRuneConfig;
                    if (runeConfig != null)
                    {
                        PrizeIcon.sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_Rune, WndID.WND_ID_POINTSHOP, runeConfig.nRuneInlayType, runeConfig.nRuneIconId);
                    }
                }
                else if (prizeConfig.nPrizeType == (int)EMActorPrizeType.ACTOR_PRIZE_HEROXPSKILL)
                {
                    PrizeIcon.sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_ActorPrize, WndID.WND_ID_POINTSHOP, prizeConfig.nPrizeType, prizeConfig.nPrizeIcon);
                }
                else if (prizeConfig.nPrizeType == (int)EMActorPrizeType.ACTOR_PRIZE_HEROSKIN)
                {
                    SkinInfoScheme skinConfig = new SkinInfoScheme();
                    if (GameLogicAPI.GetHeroSkinInfo(prizeConfig.nPrizeParam[1], ref skinConfig))
                    {
                        PrizeIcon.sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_POINTSHOP, skinConfig.nSkinIconID, 3, prizeConfig.nPrizeParam[0]);
                    }
                }
                else
                {
                    PrizeIcon.sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_ActorPrize, WndID.WND_ID_POINTSHOP, prizeConfig.nPrizeType, prizeConfig.nPrizeIcon);
                }

                PrizeDes.text = prizeConfig.strPrizeName;
                toolTip.SetText(UTooltipParamName.BodyText, prizeConfig.strPrizeDesc);
            }

            PrizeDes.gameObject.SetActive(bShowPrizeDes);

            if (effectType != UEffectPrefabType.UEPT_None)
            {
                if (param != null)
                {
                    UEffectManager.Instance.DestroyEffect(UEffectType.UET_EffectPrefab, ref param);
                    param = null;
                }
                param = new UEffectPrefabParam(_eType: effectType, _tfAttachParent: PrizeEffect.transform, _bAutoDestroy: false);
                UEffectManager.Instance.CreateEffect(UEffectType.UET_EffectPrefab, ref param);
            }

            this.gameObject.SetActive(true);
        }
示例#8
0
 public UEffectPrefabAsyncParam(UEffectPrefabType _eType, Transform _tfAttachParent, Vector3?_vAttachPosition = null, float?_fAttachRotation = null, bool _bAutoDestroy = false, Action <UEffectPrefabAsyncParam> _onResLoadFinished = null, object _resLoadUserObject = null, bool _bIsDestroyRes = false) : base(_eType, _tfAttachParent, _vAttachPosition, _fAttachRotation, _bAutoDestroy, _bIsDestroyRes)
 {
     onResLoadFinished = _onResLoadFinished;
     ResLoadUserObject = _resLoadUserObject;
 }
示例#9
0
        void onCompleteScore(int nLevel)
        {
            if (nLevel >= (int)EN_PlayerGrade.ENPLAYERGRADE_MAX || nLevel < (int)EN_PlayerGrade.ENPLAYERGRADE_S_1)
            {
                return;
            }

            medalImage.gameObject.SetActive(true);
            UEffectPrefabType enEffectPreabTypeContinue = new UEffectPrefabType();
            UEffectPrefabType enEffectPreabType         = new UEffectPrefabType();
            EN_PlayerGrade    playerGradeType           = (EN_PlayerGrade)nLevel;
            int nSpriteIndex = 0;

            switch (playerGradeType)
            {
            case EN_PlayerGrade.ENPLAYERGRADE_S_1:
            {
                enEffectPreabTypeContinue = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_S_Continue;
                enEffectPreabType         = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_S;
                nSpriteIndex = 0;
            }
            break;

            case EN_PlayerGrade.ENPLAYERGRADE_A_ADD_2:
            {
                enEffectPreabTypeContinue = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_A_Continue;
                enEffectPreabType         = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_A_ADD;
                nSpriteIndex = 1;
            }
            break;

            case EN_PlayerGrade.ENPLAYERGRADE_A_3:
            {
                enEffectPreabTypeContinue = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_A_Continue;
                enEffectPreabType         = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_A;
                nSpriteIndex = 2;
            }
            break;

            case EN_PlayerGrade.ENPLAYERGRADE_B_ADD_4:
            {
                enEffectPreabTypeContinue = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_B_Continue;
                enEffectPreabType         = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_B_ADD;
                nSpriteIndex = 3;
            }
            break;

            case EN_PlayerGrade.ENPLAYERGRADE_B_5:
            case EN_PlayerGrade.ENPLAYERGRADE_B_6:
            {
                enEffectPreabTypeContinue = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_B_Continue;
                enEffectPreabType         = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_B;
                nSpriteIndex = 4;
            }
            break;

            case EN_PlayerGrade.ENPLAYERGRADE_C_ADD_7:
            case EN_PlayerGrade.ENPLAYERGRADE_C_ADD_8:
            {
                enEffectPreabTypeContinue = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_C_Continue;
                enEffectPreabType         = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_C_ADD;
                nSpriteIndex = 5;
            }
            break;

            case EN_PlayerGrade.ENPLAYERGRADE_C_9:
            case EN_PlayerGrade.ENPLAYERGRADE_C_10:
            {
                enEffectPreabTypeContinue = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_C_Continue;
                enEffectPreabType         = UEffectPrefabType.UEPT_UWarRecordTableEnd_Medal_C;
                nSpriteIndex = 6;
            }
            break;

            default:
            {
                return;
            }
            }

            medalImage.sprite = medalSprite[nSpriteIndex];
            UEffectParamBase param = new UEffectPrefabParam(enEffectPreabType, _tfAttachParent: this.medalImage.transform);

            UEffectManager.Instance.CreateEffect(UEffectType.UET_EffectPrefab, ref param);

            // TODO 上一个弹出牌子动画播放完之后执行下面的
            UEffectParamBase paramContinue = new UEffectPrefabParam(enEffectPreabTypeContinue, _tfAttachParent: this.medalImage.transform);

            UEffectManager.Instance.CreateEffect(UEffectType.UET_EffectPrefab, ref paramContinue);

            playMedalSound();
        }
 protected int CalculateEffectPrefabRefID(UEffectPrefabType _eType)
 {
     return((int)_eType * MaxPrefabTypeRefCount + (int)m_dicEffectPrefabTypeUsed[_eType].RefferenceList.Count);
 }