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:
2026-06-12 10:49:23 +08:00
parent 5922ef373d
commit 862a1e5899
4 changed files with 36 additions and 9 deletions

View File

@@ -34,12 +34,16 @@ namespace BaseGames.Combat
Direction = -Direction;
_rb.velocity = Direction * _config.Speed * _config.ParrySpeedMultiplier;
// 阵营随弹反翻转:切到 PlayerProjectile 层(否则碰撞矩阵
// 仅当弹反者是玩家时翻转阵营:切到 PlayerProjectile 层(否则碰撞矩阵
// EnemyProjectile↔EnemyHurtBox 不碰撞,反射后永远打不中敌人),
// 伤害目标层同步切换(优先取配置的 ReflectedTargetLayers
int playerProjLayer = LayerMask.NameToLayer("PlayerProjectile");
if (playerProjLayer >= 0) gameObject.layer = playerProjLayer;
ApplyReflectedTargetLayers();
// 敌人弹反敌人投射物:阵营与目标层保持不变,仅上面已反转方向。
if (parrySystem.transform.root.CompareTag("Player"))
{
int playerProjLayer = LayerMask.NameToLayer("PlayerProjectile");
if (playerProjLayer >= 0) gameObject.layer = playerProjLayer;
ApplyReflectedTargetLayers();
}
if (_reflectSource != null)
DamageInfo = DamageInfo.From(_reflectSource);