using UnityEngine; using BaseGames.Core.Events; namespace BaseGames.AI { /// /// AI 配方资产基类。子类以序列化字段描述一张图,Build 里组装。 /// 一个资产 = 一种敌人 AI;所有引用该资产的实例共享同一张 AiGraph(flyweight)。 /// public abstract class AiRecipeSO : ScriptableObject, IAiDefinition { AiGraph _cached; void OnEnable() { // 项目已关闭 Domain Reload:SO 的运行时态在多次 Play 会话间会残留, // 改了配方再进 Play 仍用旧图。登记到统一的"进入 Play 前重置"通道。 PlayModeResetHook.Register(ClearCache); } void ClearCache() => _cached = null; public AiGraph GetOrBuildGraph() { if (_cached == null) { var b = new BrainBuilder(); Build(b); _cached = b.Build(); } return _cached; } protected abstract void Build(BrainBuilder b); } }