核心思想是将其视为分布式系统,而不是游戏循环。
全局不可变存储作为单一真理来源。所有实体状态都存储在不可变快照中——每次写入都会通过原子ImmutableDictionary交换产生一个新快照。没有锁定,沒有共享可变状态。任何线程都可以自由读取;只有一个写入路径存在。这是etcd/Kubernetes使用的相同模式。
AI与渲染解耦。 AI规划器在自己的时间计时器上运行——与60fps渲染循环完全分离。可视棋子仅从最后写入的通道中消耗移动意图,每帧进行平滑插值。整个AI层在无GPU,无显示的模式下运行,这是我们如何进行蒙特卡罗回归测试——在CI中运行数千个随机种子,根据种子重放时发生错误。
GOAP与类型范围的动作集。 不是全局动作空间,而是每种实体类型注册它可以执行的动作。药物成瘾者有3个动作;帮派成员有59个。规划器只在该类型的动作集中搜索。加上,权重计算器在规划之前运行,并根据世界状态将大多数目标门限设置为零——因此在实际中,规划器每次都评估2-3个活跃候选目标,而不是33个。
寻路不是规划。 A*在MovementService中运行,完全分离于GOAP。规划器只发出“追赶实体X,停止距离Y”意图。MovementService计算并缓存路径,只在目标移动超过阈值时重新寻路。规划器从未直接接触A*。
结果:\~50个实体的AI在每个tick下运行得很快,短于毫秒。无头压力测试,10,000个tick,20个实体耗时约15秒。
评论 (0)