feat(combat): 投射物接入伤害目标层过滤,弹反阵营/目标同步翻转

HitBox 暴露 TargetLayers 运行时读写。Projectile 缓存预制体初始目标层并在 Initialize 还原(对象池复用不被上一发弹反污染);ReflectAsPlayerProjectile 时目标层随阵营翻转(PlayerHurtBox→EnemyHurtBox,保留可破坏物等其他位)。

ParryableProjectile 绕过 HitBox 自行判定,补上同样的目标层过滤;并修复其弹反分支不切 PlayerProjectile 层的问题——原先反射后仍留在 EnemyProjectile 层,碰撞矩阵 EnemyProjectile↔EnemyHurtBox 不碰撞,反射弹永远打不中敌人。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-12 10:34:43 +08:00
parent ef7ff63b67
commit 1866f323e4
3 changed files with 41 additions and 0 deletions

View File

@@ -299,6 +299,16 @@ namespace BaseGames.Combat
// Update 轮询时的临时缓冲(避免遍历字典时修改 + 降低 GC
private readonly List<Collider2D> _intervalTickBuffer = new(8);
/// <summary>
/// 伤害目标层掩码(实例级过滤,叠加在 Physics2D 碰撞矩阵之上)。
/// 运行时可写:投射物弹反换阵营时由 Projectile 翻转目标侧。
/// </summary>
public LayerMask TargetLayers
{
get => _targetLayers;
set => _targetLayers = value;
}
/// <summary>
/// 配置为周期接触伤害模式BodyContactDamage 等持续接触源在 OnEnable 时调用)。
/// 使持续接触的判定盒按 <paramref name="interval"/> 对停留目标重复造成伤害,