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