public void ShowDamageEffect(FightEffectHelp.FightEffectType type, long value, float displayTimeScale, Actor actor, bool show_percent, string push_str) { if (GlobalConst.IsBanshuVersion) { if (type == FightEffectHelp.FightEffectType.AddExp) { return; } } var fightEffectWindow = GetFightEffectWindow(); if (fightEffectWindow == null) { return; } GameObject damageEffectObject = null; damageEffectObject = fightEffectWindow.GetObjectByFightEffectType(type); if (damageEffectObject == null) { return; } int level = FightEffectHelp.GetLayoutLevel(type); fightEffectWindow.SetGameObjectLayoutLevel(damageEffectObject, level); Vector3 worldPosInScene; Vector2 screen_abs_offset; Vector3 worldPos = xc.ui.ugui.UIFightEffectWindow.GetEffectWorldPosInUIByType(actor, type, out worldPosInScene, out screen_abs_offset); damageEffectObject.transform.position = worldPos; damageEffectObject.transform.localPosition = new Vector3(damageEffectObject.transform.localPosition.x, damageEffectObject.transform.localPosition.y, 0); Text effectValueLabel = damageEffectObject.transform.Find("Value").GetComponent <Text>(); if (type == FightEffectHelp.FightEffectType.OurDamage && value > 0) { value = -value; } FightEffectHelp.SetEffectValue(type, effectValueLabel, value, show_percent, push_str); float playTimeBySeconds = 2; Animation animation = damageEffectObject.GetComponentInChildren <Animation>(); if (animation != null && animation.clip != null) { playTimeBySeconds = animation.clip.length; animation[animation.clip.name].speed = displayTimeScale; } damageEffectObject.SetActive(true); var delay_enable = damageEffectObject.GetComponent <DelayEnableComponent>(); delay_enable.DelayTime = playTimeBySeconds; delay_enable.SetEnable = false; delay_enable.Start(); }
public bool TryShowDamageWordAnim(FightEffectHelp.FightEffectType effect_type) { if (effect_type == FightEffectHelp.FightEffectType.EnemyDamage || effect_type == FightEffectHelp.FightEffectType.Attendant_damage || effect_type == FightEffectHelp.FightEffectType.CriticEnemyDamage || effect_type == FightEffectHelp.FightEffectType.CriticAttendantDamage) { return(true); } return(false); }
/// <summary> /// 根据 FightEffectHelp.FightEffectType 返回一个合适的飘字 GameObject /// </summary> /// <param name="var_type"></param> /// <returns></returns> public GameObject GetObjectByFightEffectType(FightEffectHelp.FightEffectType var_type) { FightEffectItemStruct find_struct; m_fightEffectItemArray.TryGetValue(var_type, out find_struct); if (find_struct == null) { return(null); } return(find_struct.CurObj); }
/// <summary> /// 返回某个飘字类型的起始世界坐标位置(相对于UICamera)(PS:若没有挂点,则返回脚底坐标) /// </summary> /// <param name="target"></param> /// <param name="effect_type"></param> /// <param name="screen_abs_offset">屏幕绝对偏移值</param> /// <returns></returns> public static Vector3 GetEffectWorldPosInUIByType(Actor target, FightEffectHelp.FightEffectType effect_type, out Vector3 worldPosInScene, out Vector2 screen_abs_offset) { screen_abs_offset = Vector2.zero; worldPosInScene = Vector3.zero; if (target == null || target.transform == null) { return(Vector3.zero); } Vector3 worldPos; DBFightFlyWord.DBFightFlyWordISev flyWordSev = DBFightFlyWord.Instance.GetFightFlyWordInfo((int)effect_type); if (flyWordSev != null && flyWordSev.IsScreenCenterBone)//屏幕中心点坐标 { Camera mainCam = xc.ui.ugui.UIMainCtrl.MainCam; screen_abs_offset = new Vector2(mainCam.pixelWidth * (0.5f + flyWordSev.XOffset / 1280), mainCam.pixelHeight * (0.5f + flyWordSev.YOffset / 720)); worldPos = mainCam.ScreenToWorldPoint(new Vector3(screen_abs_offset.x, screen_abs_offset.y)); worldPos.z = 0; return(worldPos); } if (flyWordSev == null)//错误飘字类型 { worldPosInScene = target.transform.position; } else { Transform slot_transform = target.GetSlotTransform(flyWordSev.Bone); if (slot_transform == null) { worldPosInScene = target.transform.position; } else { worldPosInScene = slot_transform.position; } } Camera mainCamera = Game.Instance.MainCamera; Vector3 screenPos = mainCamera.WorldToScreenPoint(worldPosInScene); if (flyWordSev != null) { screen_abs_offset = new Vector2(mainCamera.pixelWidth * flyWordSev.XOffset / 1280, mainCamera.pixelHeight * flyWordSev.YOffset / 720); screenPos.x += screen_abs_offset.x; screenPos.y += screen_abs_offset.y; } worldPos = xc.ui.ugui.UIMainCtrl.MainCam.ScreenToWorldPoint(screenPos); worldPos.z = 0; return(worldPos); }
/// <summary> /// 显示未命中时候的效果 /// </summary> public static void ShowDamageEffect(Damage dmg, uint effectType, int value = 0) { var damageEffects = DBDamageEffect.GetInstance().DamagetEffects; using (var enumer = damageEffects.GetEnumerator()) { while (enumer.MoveNext()) { var info = enumer.Current.Value; // 从DBDamageEffect配表中获取匹配的特殊伤害类型 if ((effectType & info.ID) != 0) { FightEffectHelp.FightEffectType type = FightEffectHelp.GetFightEffectTypeByDamageEffect((Damage.EDamageEffect)info.ID); if (info.Target == DBDamageEffect.EffectTarget.ET_DEST) { var targer_actor = dmg.target; if (targer_actor != null) { targer_actor.ShowDamageEffect(type, dmg.SrcID, value); } } else if (info.Target == DBDamageEffect.EffectTarget.ET_SRC) { var src_actor = dmg.src; if (src_actor != null) { if (type == FightEffectHelp.FightEffectType.OneHitKill) { continue; } src_actor.ShowDamageEffect(type, dmg.SrcID, value); } } } } } }
/// <summary> /// 显示伤害数字 /// </summary> public void ShowDamageValue(/*Vector3 headPos, */ int damageValue, float displayTimeScale, EUnitType unitType, bool isLocalPlayer, Actor actor, Vector3 attacker_world_pos, FightEffectHelp.FightEffectType type) { if (damageValue <= 0) { return; } var fightEffectWindow = GetFightEffectWindow(); if (fightEffectWindow == null) { return; } GameObject damageEffectObject = null; damageEffectObject = fightEffectWindow.GetObjectByFightEffectType(type); if (damageEffectObject == null) { return; } //damageEffectObject.transform.localScale = Vector3.one * m_normal_damage_num_scale; int level = FightEffectHelp.GetLayoutLevel(type); fightEffectWindow.SetGameObjectLayoutLevel(damageEffectObject, level); Vector3 worldPosInScene; Vector2 screen_abs_offset; Vector3 worldPos = xc.ui.ugui.UIFightEffectWindow.GetEffectWorldPosInUIByType(actor, type, out worldPosInScene, out screen_abs_offset); damageEffectObject.transform.position = worldPos; damageEffectObject.transform.localPosition = new Vector3(damageEffectObject.transform.localPosition.x, damageEffectObject.transform.localPosition.y, 0); if (type == FightEffectHelp.FightEffectType.OneHitKill) { } else { Text effectValueLabel = damageEffectObject.transform.Find("Value").GetComponent <Text>(); if (effectValueLabel != null) { if (isLocalPlayer) { effectValueLabel.text = (-damageValue).ToString(); } else if (type == FightEffectHelp.FightEffectType.OurDamage && damageValue > 0) { effectValueLabel.text = (-damageValue).ToString(); } else { effectValueLabel.text = damageValue.ToString(); } } } damageEffectObject.SetActive(true); float playTimeBySeconds = 2; Animation animation = damageEffectObject.GetComponentInChildren <Animation>(); if (animation != null && animation.clip != null) { playTimeBySeconds = animation.clip.length; animation[animation.clip.name].speed = displayTimeScale; } var delay_enable = damageEffectObject.GetComponent <DelayEnableComponent>(); delay_enable.DelayTime = 2 * displayTimeScale; delay_enable.SetEnable = false; delay_enable.Start(); if (TryShowDamageWordAnim(type)) { UIFightDamageWordAnimComponent anim_component = damageEffectObject.GetComponent <UIFightDamageWordAnimComponent>(); if (anim_component == null) { anim_component = damageEffectObject.AddComponent <UIFightDamageWordAnimComponent>(); } anim_component.Show(displayTimeScale, worldPosInScene, attacker_world_pos, actor.transform.position, type, screen_abs_offset); } }