feat(ai): IAiDefinition + AiRecipeSO 配方基类(含关闭域重载的缓存重置)

This commit is contained in:
2026-07-29 14:32:45 +08:00
parent 7327a5fe09
commit 6d8db95046
6 changed files with 73 additions and 2 deletions
+36
View File
@@ -0,0 +1,36 @@
using UnityEngine;
using BaseGames.Core.Events;
namespace BaseGames.AI
{
/// <summary>
/// AI 配方资产基类。子类以序列化字段描述一张图,Build 里组装。
/// 一个资产 = 一种敌人 AI;所有引用该资产的实例共享同一张 AiGraphflyweight)。
/// </summary>
public abstract class AiRecipeSO : ScriptableObject, IAiDefinition
{
AiGraph _cached;
void OnEnable()
{
// 项目已关闭 Domain ReloadSO 的运行时态在多次 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);
}
}