// 检查所有效果数量有没有超出值 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 + "是不是哪里有问题?"); } }
/// <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); }
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); }
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); }
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; }
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); }