刷怪、触发器、AI 与掉落 private

刷怪、触发器、AI 与掉落

回答“Spawner 如何被 Trigger 激活、谁拥有刷怪权威、随机组、AI 和掉落怎样衔接”。

返回技术文档目录

8. 刷怪、触发、AI 与掉落

8.1 地图怪物生成链

flowchart LR
    A[MonsterSpawnerElement] --> B[MapProcessor]
    B --> C[MapEntity + Blueprint]
    C --> D{关联 Trigger?}
    D -- 否 --> E[MapLoaded SpawnEvent]
    D -- 是 --> F[Collider TriggerEnter]
    F --> G[MapTriggered SpawnEvent]
    E --> H[SignalFilter]
    G --> H
    H --> I[SignalSpawnSystem]
    I --> J[克隆 Blueprint 为 CoreEntity]
    J --> K[Actor/View 或网络同步]

Blueprint 包含 ObjectType、SpawnData/SpawnId、Monster 标记、OverrideProperties、SignalFilter 和 Delay。

无 Trigger 的普通怪由 MonsterGlobalSpawnTriggerSystem 在地图加载时发 MapLoaded。有 Trigger 的怪不会自动走这条路径;碰撞进入后,MapTriggerSystem 叠加 Trigger 与目标延迟,再发 MapTriggered。SignalSpawnSystem 仅在 SignalFilter 匹配时克隆 Blueprint。

8.2 谁负责刷怪

工程有普通 Spawn System 和 HostClient* 版本。HostClient 版本通过 IsHost 门控,避免每台客户端都重复刷怪。联机战斗中,Battle 负责创建/保存 Monster 实体并分配 playerId,但当前项目没有在 Battle 服务器运行一套等价于 Unity EnemyStateMachine 的完整 AI Think。服务端把怪物控制权交给 Scene.HostPlayerId 对应的客户端;该客户端执行目标搜索、追击、NavMesh 移动和技能状态机,再把同步包发回 Battle。

新增玩法前必须选清模型:单机本地、玩家 Host 权威、独立 Battle 权威。System 组合错误会直接导致重复刷怪或完全不刷。

8.3 随机组、波次和 AI

  • 地图控制出生位置、触发关系、巡逻点、范围和局部覆盖。
  • Monster 配置控制基础属性、模型、移动、技能和掉落。
  • MonsterRandomPool/Plan/Group 与 Gameplay_* 表控制随机组合及玩法波次。
  • 服务端按权重和玩法条件选择随机组,并把模板下标放入 SceneInfo。
  • 训练场和特定波次玩法还有独立 Spawner Manager/状态机,应从对应 Battle* 玩法类继续追。

地图覆盖只提供出生点、巡逻点、触发关系和 AI 初始参数。实际的 Idle/Chase/Attack/Skill 状态切换由当前 Host 客户端的 EnemyStateMachine 执行;服务端 Monster 保存属性、机器状态、死亡/掉落等共享结果,并做基础校验与广播。联网模式的 HP、死亡、奖励仍应以 Battle 的结果为准,非 Host 客户端只消费同步结果。

8.4 当前项目的联网怪物控制链

刷怪系统/地图触发
  -> Battle 创建 Monster + 配置属性
  -> MonsterMgr 纳入场景实体列表
  -> Scene.HostPlayerId 分配 Monster.playerId
  -> Host 客户端 ChangeControllerSystem 接管
  -> EnemyStateMachine 目标搜索与状态决策
  -> MoveController/NavMesh + 技能系统执行
  -> MoveBegin/StateSync/FrameStateSync 回 Battle
  -> Battle 校验归属并广播给观察者

不要把服务端字段 Monster.machineState 看成服务器正在运行完整 AI。它主要是服务端保存客户端上报/同步的机器状态,用于 Boss 是否允许被技能选中等服务端规则;代码中没有对应 Unity SearchAndLockTarget 的服务端 Think 循环。

8.5 新增怪物 SOP

  1. 在 Monster 源表新增或复用配置 ID,确认模型枚举、HP、移动、技能、掉落。
  2. 随机或波次玩法同时维护 Pool、Plan、Group/Gameplay 表。
  3. 重新生成客户端和服务端配置。
  4. 地图放置 Spawner,填写 ID、SignalFilter、Delay 和覆盖项。
  5. 需要区域触发时建立 Trigger 到 Spawner 的目标关系。
  6. 运行地图检查,导出并同步同版地图到两端。
  7. 服务端确认 Monster Entity 创建/激活,客户端确认是网络实体而非重复本地创建。

上一篇:寻路系统 下一篇:配置系统