From 087aa96ca6d2e9d0aefc6b15c199f0b8b69c8ee8 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Fri, 10 Jul 2026 13:30:46 +0800 Subject: [PATCH] =?UTF-8?q?@=20fix(ai):=20EnemyAiBrain=20=E5=9C=A8=20Start?= =?UTF-8?q?=20=E6=9E=84=E9=80=A0=20runtime=EF=BC=8C=E4=BF=AE=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E6=80=81=20locomotion=20NRE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 入口状态 OnEnter 会声明 locomotion 意图(x.Locomotion.SetMode),但原在 Awake 构造 AiRuntime 时 EnterInitial 立即触发该 OnEnter——此时 EnemyBase.Awake 可能 尚未发现 _locomotion(两组件 Awake 顺序未定),导致 x.Locomotion 为 null 抛 NRE, brain 未建成 runtime。改在 Start 构造(所有 Awake 先于任一 Start),保证依赖就绪。 根因修复,非 null 兜底。P3 PlayMode 验证发现。 Co-Authored-By: Claude Opus 4.8 (1M context) @ --- Assets/_Game/Scripts/Enemies/AIBrain/EnemyAiBrain.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Assets/_Game/Scripts/Enemies/AIBrain/EnemyAiBrain.cs b/Assets/_Game/Scripts/Enemies/AIBrain/EnemyAiBrain.cs index c92c460a..20123148 100644 --- a/Assets/_Game/Scripts/Enemies/AIBrain/EnemyAiBrain.cs +++ b/Assets/_Game/Scripts/Enemies/AIBrain/EnemyAiBrain.cs @@ -31,8 +31,13 @@ namespace BaseGames.Enemies // 根因暴露:漏配 id 直接报错,不静默兜底。 Debug.LogError($"EnemyAiBrain 未配置 _definitionId:{name}", this); enabled = false; - return; } + } + + // 在 Start 构造 runtime:确保 EnemyBase.Awake 已发现 Locomotion/子系统后, + // 再触发入口状态 OnEnter(其会声明 locomotion 意图)。所有 Awake 先于任一 Start 执行。 + void Start() + { var graph = AiDefinitionRegistry.GetGraph(_definitionId); // 不存在则抛异常 _context = new EnemyBrainContext(_enemy); _runtime = new AiRuntime(graph, _context);