From 6d2304d5ae39a4d78b30204dfa8ad9db2f054336 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期日, 14 九月 2025 10:35:45 +0800
Subject: [PATCH] 125 【战斗】战斗系统 修复技能播放偶尔会出现死循环的bug
---
Main/System/Battle/BattleObject/BattleObject.cs | 11 +++++++----
Main/System/Battle/Skill/SkillBase.cs | 11 ++++++-----
Main/System/Battle/Motion/MotionBase.cs | 29 ++++++++++++++++++++++++++---
3 files changed, 39 insertions(+), 12 deletions(-)
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 54572e5..dfe291d 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -265,10 +265,12 @@
public virtual void Hurt(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
{
- PopDamage(damageValues, _totalDamage, hurt, skillConfig);
+ BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig);
- motionBase.PlayAnimation(MotionName.hit, false);
-
+ if (dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage())
+ {
+ motionBase.PlayAnimation(MotionName.hit, false);
+ }
}
public void SuckHp(uint suckHP, SkillConfig skillConfig)
@@ -334,7 +336,7 @@
}
// 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
- protected virtual void PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
+ protected virtual BattleDmgInfo PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
{
BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, damageValues, this, hurt, skillConfig);
@@ -356,6 +358,7 @@
// YYL TODO 鏄惁闇�瑕佹寕鍦ㄥ湪鑷韩鐨刦ollow鐐逛笂
EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
+ return battleDmgInfo;
}
public RectTransform GetAliasTeamNode()
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index b5fb81b..40d4d06 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -118,8 +118,8 @@
{
if (trackEntryCompleteDict.TryGetValue(currentTrackEntry, out var __onComplete))
{
- __onComplete?.Invoke();
trackEntryCompleteDict.Remove(currentTrackEntry);
+ __onComplete?.Invoke();
}
currentTrackEntry = null;
}
@@ -336,8 +336,8 @@
// 鍙皟鐢ㄦ湰娆rackEntry鐨勫洖璋�
if (trackEntryCompleteDict.TryGetValue(trackEntry, out var cb))
{
- cb?.Invoke();
trackEntryCompleteDict.Remove(trackEntry);
+ cb?.Invoke();
}
}
@@ -345,10 +345,33 @@
public virtual void Run()
{
+// #if UNITY_EDITOR
+// List<int> removeIndex = new List<int>();
+// #endif
for (int i = runActionList.Count - 1; i >= 0; i--)
{
- runActionList[i]?.Invoke();
+// #if UNITY_EDITOR
+// try
+// {
+// #endif
+ runActionList[i]?.Invoke();
+// #if UNITY_EDITOR
+// }
+// catch (System.Exception ex)
+// {
+// removeIndex.Add(i);
+// BattleDebug.LogError($"鎵цRunAction鏃跺彂鐢熷紓甯�: {ex.Message}\n{ex.StackTrace}");
+// }
+// #endif
}
+
+// #if UNITY_EDITOR
+// // 绉婚櫎澶辫触鐨凙ction
+// for (int i = 0; i < removeIndex.Count; i++)
+// {
+// runActionList.RemoveAt(removeIndex[i]);
+// }
+// #endif
}
public virtual void Pause()
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index cd4c91d..2ce14ec 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -151,12 +151,12 @@
// battleField.battleTweenMgr.OnPlayTween(tweener);
}
- protected void MoveToTarget(RectTransform target, Vector2 offset, Action onComplete = null)
+ protected void MoveToTarget(RectTransform target, Vector2 offset, Action _onComplete = null)
{
// 鍘熷湴閲婃斁
if (skillConfig.CastDistance >= 9999)
{
- onComplete?.Invoke();
+ _onComplete?.Invoke();
return;
}
@@ -164,7 +164,7 @@
var tweener = BattleUtility.MoveToTarget(caster.heroRectTrans, target, offset, () =>
{
caster.motionBase.PlayAnimation(MotionName.idle, true);
- onComplete?.Invoke();
+ _onComplete?.Invoke();
});
battleField.battleTweenMgr.OnPlayTween(tweener);
}
@@ -236,9 +236,9 @@
TurnBack(
() =>
{
+ RectTransform rectTransform = battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum);
// 鍥炲埌鍘熸潵鐨勪綅缃�
- MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero,
- OnAttackFinish);
+ MoveToTarget(rectTransform, Vector2.zero, OnAttackFinish);
}
, -1f);
});
@@ -404,6 +404,7 @@
protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
{
// 浼ゅ鍒嗗竷 (涓囧垎姣�)
+ // Debug.LogError("skillConfig.DamageDivide.Count " + skillConfig.DamageDivide.Length + " _hitIndex " + _hitIndex);
int[] damageDivide = skillConfig.DamageDivide[_hitIndex];
long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
--
Gitblit v1.8.0