refactor(enemy): 敌人专属子类改为零代码配置型行为组件
This commit is contained in:
@@ -92,9 +92,12 @@ public class EnemyBase : MonoBehaviour, IDamageable
|
||||
|
||||
// ──── EnemyAnimationEvents 接口(虚方法,Boss 子类覆盖)──────────
|
||||
// 由 EnemyAnimationEvents.OnAnimationEvent 在对应动画帧触发时调用(见 24_AnimEventModule §6)
|
||||
public virtual void SpawnProjectile(string data) { }
|
||||
// SpawnProjectile 基类实现:路由到挂载的 IEnemySpawnEventHandler 组件(见 §8.5 配置型行为组件)
|
||||
public virtual void SpawnProjectile(string data) { /* routes to IEnemySpawnEventHandler */ }
|
||||
public virtual void TriggerPhaseTwo() { }
|
||||
public virtual void OnAnimationComplete(string data) { }
|
||||
// 对象池取出并完成 OnSpawn 重置后触发;配置型出生行为组件(EnemyAbilityTrigger)订阅
|
||||
public event System.Action Spawned;
|
||||
// ⚡ BD 每帧 Tick 调用 Blackboard 读写 SharedVariable;Awake 缓存、消除 GetComponent 热开销
|
||||
public BehaviorTree Blackboard => _behaviorTree;
|
||||
|
||||
@@ -426,6 +429,20 @@ public class EnemyAnimationConfigSO : ScriptableObject
|
||||
|
||||
---
|
||||
|
||||
## 8.5 配置型行为组件(零代码扩展点)
|
||||
|
||||
过去 E003/E004/E005 等敌人各写一个继承 `EnemyBase` 的专属子类,只为挂接少量生命周期钩子。现已抽成**通用、可配置的行为组件**——策划在 Prefab 上加组件、填字段即可,不再为单个敌人写脚本。`EnemyBase` 在 `Awake` 收集这些组件并在对应时机回调。
|
||||
|
||||
| 组件 | 命名空间 | 作用 | 关键字段 | 接入的 EnemyBase 钩子 |
|
||||
|------|---------|------|---------|---------------------|
|
||||
| `EnemyAbilityTrigger` | `BaseGames.Enemies.Behaviors` | 出生时(对象池)或外部时机执行某个能力 | `_abilityId`、`_executeOnSpawn` | 订阅 `Spawned` 事件;`public Trigger()` 供场景触发器/UnityEvent/动画事件调用 |
|
||||
| `EnemyDeathSequence` | 同上 | 死亡前摇无敌演出(停 BT/移动、关 HurtBox、播放前摇、等待后再真正死亡) | `_deathPreClip`、`_duration`、`_hurtBoxesToDisable` | 实现 `IEnemyDeathSequence`;`Die()` 委托其播放,期间 `IsInvincible=true`,结束回调 `PerformDeath()` |
|
||||
| `EnemySpawnerOnEvent` | 同上 | 动画事件触发的对象池生成(如死亡演出中生成小怪) | `_payloadKey`、`_poolKey`、`_count`、`_radius` | 实现 `IEnemySpawnEventHandler`;`SpawnProjectile(payload)` 路由匹配 |
|
||||
|
||||
扩展原则:新的"某时机做某事"需求优先做成此类通用组件(参考现有 `AssignReference`/`AssignAsset` 脚手架绑定模式接入 `SceneObjectPlacerTool`),而非新建 `EnemyBase` 子类——使敌人尽量通过配置而非代码创建。`RangedEnemy` / `BossBase` / `ChaoFengBoss` 等仍可重写 `SpawnProjectile`/`Die` 自定义逻辑(重写不调用 base 时即绕过路由/委托)。
|
||||
|
||||
---
|
||||
|
||||
## 9. BossBase
|
||||
|
||||
```csharp
|
||||
|
||||
Reference in New Issue
Block a user