不要用过去的成绩看未来,而是要用未来的眼睛看现在。
郑重说明:本文适合对游戏开发感兴趣的小白初学者,本人力图将事物用简单的语言表达清楚,但水平有限,能力一般,文章如有错漏之处,还望批评指正。
在本系列的前几篇中,我们谈到了谈一谈游戏AI - 综述 以及 谈一谈游戏AI - 状态机。今天我们来继续聊一下另一种高级决策模型:行为树。
一、为什么需要行为树
有一种很重要的认识事物的思维模型就是 why-what-how 模型,因此首先我们就要了解一下 why 的问题,看看为什么需要行为树这种高级决策模型。
在前面介绍状态机时,分层有限状态机(HFSM) 让我们能够以相对直观的方式,构建相对复杂的行为集。
但是这个设计中存在一个小问题:
以状态转换规则构成的决策系统与当前状态强绑定在一起,这是一些游戏所需要的。
仔细使用状态层次结构可以减少重复转换的数量,但有时候,我们的需求不一样,可能无论处于哪个状态或几乎在所有状态,你的规则都要适用。打个比方,如果 AI对象(agent)的生命值降低到25%时,则无论其当前处于战斗状态,空闲状态、谈话状态或者其它任何状态,你可能都希望他逃跑。如果用状态机,你需要在每个状态里都做这样的判断逻辑。将来新增每个状态时,都一定把这个条件添加进去。
针对这种情况,一个理想的系统应该将决策过程和状态本身分离,这样你只需要在一个位置进行更改,仍然能够正确转换状态,这就是行为树的应用场景。
二、决策的行为树表示
行为树定义
在之前的讲述游戏AI决策综述的文章中,我们提到过一个球拍击球的小游戏AI,用代码 hardcode 的伪代码如下:
every frame/update while the game is running:
if the ball is to the left of the paddle:
move the paddle left
else if the ball is to the right of the paddle:
move the paddle right