refactor(enemy): 身体接触伤害改为常驻开启并与能力解耦

所有敌人默认常驻身体接触伤害:存活即开、死亡时经 PerformDeath 统一关碰撞体停止。
- ContactChaseAbility/AnimatedCeilingDropAbility 移除对 BodyContactDamage 的开关引用
- BodyContactDamage 语义改为常驻(更新注释)
- 脚手架 SetupHurtAndContactBoxes 去掉 contactEnabled 参数恒为 true,并把
  ContactDamageZone 的 HitBox._targetLayers 限定为 PlayerHurtBox(避免常驻后敌人互相误伤)
- 7 个敌人预制体:E001 启用 BodyContactDamage;E002/E004/E005/ChaoFeng 补齐
  ContactDamageZone(镜像 HurtBox 身体碰撞体);全部 _targetLayers 收敛为 PlayerHurtBox
- 更新 Docs/Guides/02 敌人搭建指南

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-21 16:18:07 +08:00
co-authored by Claude Opus 4.8
parent b4379db5de
commit 6f519ec9a9
12 changed files with 461 additions and 225 deletions
@@ -6,16 +6,14 @@ using UnityEngine;
namespace BaseGames.Enemies.Abilities
{
/// <summary>
/// 带动画的天花板跌落能力:播放 Fall 动画 + 切换物理体为 Dynamic 自由下落,落地后启用接触伤害并恢复巡逻。
/// 带动画的天花板跌落能力:播放 Fall 动画 + 切换物理体为 Dynamic 自由下落,落地后恢复巡逻。
/// 取代 sealed 的 CeilingDropAbility,动画所有权完整封装在本能力中。
/// 可复用于任何需要从天花板落下并造成接触伤害的敌人。
/// 可复用于任何需要从天花板落下的敌人。
/// 身体接触伤害与本能力解耦:由常驻的 <see cref="BodyContactDamage"/> 全程负责,本能力不再开关它。
/// </summary>
[RequireComponent(typeof(Rigidbody2D))]
public class AnimatedCeilingDropAbility : EnemyAbilityBase
{
[Header("落地后")]
[SerializeField] private BodyContactDamage _contactDamage;
private AnimatedCeilingDropAbilitySO _cfg;
private Rigidbody2D _rb;
@@ -53,10 +51,7 @@ namespace BaseGames.Enemies.Abilities
}
_rb.velocity = Vector2.zero;
// 落地后启用接触伤害
if (_contactDamage != null)
_contactDamage.enabled = true;
// 身体接触伤害由常驻 BodyContactDamage 全程负责,落地无需在此开启。
yield return EnemyAbilityWaits.Get(_cfg.recoveryTime);
// PlayLocomotionClip(Patrol) 播放 AnimConfig.Walk(地面移动动画)
@@ -73,8 +68,6 @@ namespace BaseGames.Enemies.Abilities
{
if (_rb != null)
_rb.velocity = Vector2.zero;
if (_contactDamage != null)
_contactDamage.enabled = false;
}
}
}