fix(combat): 弹反阵营感知——仅玩家弹反才翻转投射物阵营与目标层
新增 Projectile.ReflectBy(parrier):按弹反者根节点 Tag 区分阵营。玩家弹反走原 ReflectAsPlayerProjectile(切 PlayerProjectile 层+切换伤害目标层);敌人弹反敌人投射物时阵营层与目标层均保持不变(仍是敌方投射物、仍打玩家侧),仅反转方向并重置命中记录与预算。HurtBox 弹反分支改传弹反者 Transform;ParryableProjectile 手写弹反分支同步加阵营判断。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -71,9 +71,31 @@ namespace BaseGames.Combat
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 弹反:将投射物阵营从 EnemyProjectile 切换为 PlayerProjectile。
|
||||
/// 阵营感知弹反入口:根据弹反者阵营决定反射行为。
|
||||
/// 玩家弹反 → 切 PlayerProjectile 层并切换伤害目标层(走 <see cref="ReflectAsPlayerProjectile"/>);
|
||||
/// 敌人弹反 → 阵营层与伤害目标层均保持不变(仍是敌方投射物、仍打玩家侧),仅反转方向并重置命中记录。
|
||||
/// 由 HurtBox.ReceiveDamage() 在弹反成功后调用,传入弹反者 Transform。
|
||||
/// </summary>
|
||||
public virtual void ReflectBy(Transform parrier)
|
||||
{
|
||||
if (parrier != null && parrier.root.CompareTag("Player"))
|
||||
{
|
||||
ReflectAsPlayerProjectile();
|
||||
return;
|
||||
}
|
||||
|
||||
// ── 敌人弹反:不换阵营、不换目标层,仅反转飞行并重置判定 ──
|
||||
Direction = -Direction;
|
||||
_rb.velocity = -_rb.velocity;
|
||||
_hitBox.Deactivate();
|
||||
_hitBox.Activate(_config?.DamageSource);
|
||||
_hitsRemaining = _maxHits;
|
||||
_justReflected = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 玩家弹反:将投射物阵营从 EnemyProjectile 切换为 PlayerProjectile。
|
||||
/// 反转飞行方向,并重置 HitBox 命中记录使其能够命中新目标(敌人)。
|
||||
/// 由 HurtBox.ReceiveDamage() 在弹反成功后调用。
|
||||
/// </summary>
|
||||
public virtual void ReflectAsPlayerProjectile()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user