feat(ai): IAiDefinition + AiRecipeSO 配方基类(含关闭域重载的缓存重置)
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
using UnityEngine;
|
||||
using BaseGames.Core.Events;
|
||||
|
||||
namespace BaseGames.AI
|
||||
{
|
||||
/// <summary>
|
||||
/// AI 配方资产基类。子类以序列化字段描述一张图,Build 里组装。
|
||||
/// 一个资产 = 一种敌人 AI;所有引用该资产的实例共享同一张 AiGraph(flyweight)。
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user