refactor(enemy): 清全库行为树残留,删无人使用的 Boss 技能事件频道
Task 21 Step 2 全库扫描后的收尾: 注释与 Tooltip 里的旧决策层措辞逐处改为只描述功能—— EnemyControlledState / RangedEnemy / FlyingEnemy / SensorSlotNames / EnemyPoiseComponent / EnemyAnimationConfigSO / EnemyAiBrain。 EnemyQuotaManager 的序列化字段 _maxActiveBehaviorTrees 改名 _maxActiveBrains (它裁剪的实际是 EnemyAiBrain),带 FormerlySerializedAs。复核确认目前 无任何场景 / 预制体挂载该组件,故无值可丢;属未雨绸缪。 BossSkillEventChannelSO + BossEvents.BossSkillEvent + EVT_BossSkill.asset 删除: 唯一发送方 BossSkillExecutor 已随旧轨删除,复核确认全项目零发送方、零订阅方, 资产 guid 在场景 / 预制体 / Addressables 分组中均无引用。 自检:编译 0 error;EditMode 260/260 通过; SO 校验 0 error 0 warning;层矩阵 25/25 正确。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,15 +1,5 @@
|
||||
namespace BaseGames.Core.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// Boss 技能事件负载。
|
||||
/// </summary>
|
||||
[System.Serializable]
|
||||
public struct BossSkillEvent
|
||||
{
|
||||
public string BossId;
|
||||
public string SkillId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Boss 阶段切换事件负载。
|
||||
/// </summary>
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BaseGames.Core.Events
|
||||
{
|
||||
[CreateAssetMenu(menuName = "BaseGames/Events/BossSkill")]
|
||||
public class BossSkillEventChannelSO : BaseEventChannelSO<BossSkillEvent> { }
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8230eab2acba8c24499b2d20df81adb7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -60,7 +60,6 @@ namespace BaseGames.Editor
|
||||
CreateAsset<VoidEventChannelSO> ("Combat", "EVT_ShieldRestored");
|
||||
|
||||
// ── Boss ──────────────────────────────────────────────────────────
|
||||
CreateAsset<BossSkillEventChannelSO> ("Boss", "EVT_BossSkill");
|
||||
CreateAsset<BossPhaseEventChannelSO> ("Boss", "EVT_BossPhase");
|
||||
CreateAsset<BossPhaseEventChannelSO> ("Boss", "EVT_BossPhaseChanged");
|
||||
CreateAsset<StringEventChannelSO> ("Boss", "EVT_BossDefeated");
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace BaseGames.Enemies
|
||||
{
|
||||
/// <summary>
|
||||
/// 把 BrainGraph 决策层挂到敌人上:按 id 取共享 AiGraph、构造 AiRuntime、逐帧推进。
|
||||
/// 取代旧的行为树组件。
|
||||
/// 是敌人唯一的决策层组件(小怪与 Boss 共用)。
|
||||
/// </summary>
|
||||
[DisallowMultipleComponent]
|
||||
[RequireComponent(typeof(EnemyBase))]
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace BaseGames.Enemies
|
||||
public AnimationClip Investigate;
|
||||
|
||||
/// <summary>
|
||||
/// 按字段名返回 Clip(BD_PlayAnimation 使用)。
|
||||
/// 按字段名返回 Clip(AI 状态片段与能力模块按名取动画时使用)。
|
||||
/// 支持字段名和常见别名(如 Attack_Melee / Idle 等)。
|
||||
/// </summary>
|
||||
public AnimationClip GetClipByName(string name)
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace BaseGames.Enemies
|
||||
/// <summary>
|
||||
/// 敌人霸体组件(架构 06_CombatModule §13)。
|
||||
/// Awake 时自动注入到同节点 HurtBox(无需手动 Inspector 赋值)。
|
||||
/// EnemyBase 或 BehaviorDesigner 任务可调用 SetPoiseLevel / ResetPoiseLevel 切换超甲状态。
|
||||
/// EnemyBase、能力模块或动画事件可调用 SetPoiseLevel / ResetPoiseLevel 切换超甲状态。
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(EnemyBase))]
|
||||
public class EnemyPoiseComponent : MonoBehaviour, IPoiseSource
|
||||
@@ -31,7 +31,7 @@ namespace BaseGames.Enemies
|
||||
|
||||
// ── 外部 API ──────────────────────────────────────────────────────────
|
||||
|
||||
/// <summary>进入/退出超甲时由 EnemyBase 或 BehaviorDesigner 任务调用。</summary>
|
||||
/// <summary>进入/退出超甲时由 EnemyBase、能力模块或动画事件调用。</summary>
|
||||
public void SetPoiseLevel(PoiseLevel level) => _currentPoiseLevel = level;
|
||||
|
||||
/// <summary>恢复到默认霸体等级(超甲结束时调用)。</summary>
|
||||
|
||||
@@ -5,14 +5,16 @@ using BaseGames.Core.Events;
|
||||
namespace BaseGames.Enemies
|
||||
{
|
||||
/// <summary>
|
||||
/// 敌人 BehaviorTree 配额管理器(架构 07_EnemyModule §13)。
|
||||
/// 敌人决策层配额管理器(架构 07_EnemyModule §13)。
|
||||
/// 每 REBALANCE_INTERVAL 帧,按到玩家距离排序已注册敌人,
|
||||
/// 仅对最近的 _maxActiveBehaviorTrees 个敌人启用 BT。
|
||||
/// 仅对最近的 _maxActiveBrains 个敌人启用 <see cref="EnemyAiBrain"/>,其余暂停决策与感知。
|
||||
/// 挂载在场景管理器 GameObject 上(每场景一个实例)。
|
||||
/// </summary>
|
||||
public class EnemyQuotaManager : MonoBehaviour
|
||||
{
|
||||
[SerializeField, Min(1)] private int _maxActiveBehaviorTrees = 12;
|
||||
[Tooltip("同时保持决策活跃的敌人上限;超出的按距离由远及近暂停")]
|
||||
[UnityEngine.Serialization.FormerlySerializedAs("_maxActiveBehaviorTrees")]
|
||||
[SerializeField, Min(1)] private int _maxActiveBrains = 12;
|
||||
[Tooltip("PlayerController.Start() 广播此频道,替代 FindWithTag")]
|
||||
[SerializeField] private TransformEventChannelSO _onPlayerSpawned;
|
||||
|
||||
@@ -107,11 +109,11 @@ namespace BaseGames.Enemies
|
||||
if (enemy == null) { _registered.RemoveAt(i); continue; }
|
||||
|
||||
var brain = enemy.Brain;
|
||||
bool active = i < _maxActiveBehaviorTrees;
|
||||
bool active = i < _maxActiveBrains;
|
||||
|
||||
if (brain != null && brain.enabled != active)
|
||||
{
|
||||
// 禁用 brain 即停其 Update/Tick,等价于旧的禁用行为树。
|
||||
// 禁用 brain 即停其 Update/Tick,敌人保持静止但仍存在于场景中。
|
||||
brain.enabled = active;
|
||||
// 同步暂停/恢复感知系统,避免远处敌人无效 tick
|
||||
enemy.SensorHub?.SetSuspended(!active);
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace BaseGames.Enemies
|
||||
/// 飞行敌人基类。
|
||||
///
|
||||
/// 导航由 <see cref="Navigation.FlyingNavigator"/> 实现(IEnemyNavigator),
|
||||
/// AI 行为逻辑由挂载的 Behavior Designer 树驱动。
|
||||
/// AI 决策由挂载的 <see cref="EnemyAiBrain"/>(BrainGraph)驱动。
|
||||
/// 本类仅负责:
|
||||
/// <list type="bullet">
|
||||
/// <item>Rigidbody2D 无重力初始化</item>
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace BaseGames.Enemies.Perception
|
||||
|
||||
/// <summary>
|
||||
/// 视线检测(BatchLOS):敌我之间无遮挡时持续为 true。
|
||||
/// 由 PhysicsPerceptionSystem 自研批量计算(OverlapCircle + 单次 Raycast),BD_IsPlayerVisible 读取结果。
|
||||
/// 由 PhysicsPerceptionSystem 批量计算(OverlapCircle + 单次 Raycast),AI 图的可见性条件读取结果。
|
||||
/// </summary>
|
||||
public const string LOS = "los";
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace BaseGames.Enemies
|
||||
{
|
||||
/// <summary>
|
||||
/// 远程敌人。重写 <see cref="EnemyBase.SpawnProjectile"/> 以从对象池生成抛射物。
|
||||
/// Behavior Designer 任务通过调用 SpawnProjectile(payload) 触发发射。
|
||||
/// 能力模块或动画事件通过调用 SpawnProjectile(payload) 触发发射。
|
||||
/// </summary>
|
||||
public class RangedEnemy : EnemyBase
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@ namespace BaseGames.Enemies.States
|
||||
{
|
||||
/// <summary>
|
||||
/// 受控状态(默认行为)。
|
||||
/// 敌人处于 AI 正常控制下(Behavior Designer 运行中),无特殊 Enter/Exit 动画逻辑。
|
||||
/// 敌人处于 AI 正常控制下(决策层运行中),无特殊 Enter/Exit 动画逻辑。
|
||||
/// </summary>
|
||||
public sealed class EnemyControlledState : IEnemyState
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user