创建资源
右键资源面板,在人工智能选项中创建黑板和行为树。
创建一个蓝图类,通过在所有类中搜索AI_Controller
来进行创建。
到这里,你的内容浏览器中应该有上面红色方框中的四样内容,行为树,AI控制器,角色以及一个黑板。
三者的作用
角色是我们后面操控的傀儡,AI行为树相当于一个指挥中枢而黑板是存放变量的一个“黑板”。AI_Controller
是直接操纵傀儡的大脑。你可以理解为,指挥中枢会发出一些命令,让AI控制器来操纵傀儡,指挥中枢会利用“黑板”来存放一些变量。在AI行为树内用树状结构来表示AI的行为。
在AI_Controller
中添加一个AI感知组件/AI_Perception
,用于作为傀儡的感官(眼睛)来检测视野中是否有玩家。
选中感知组件并在细节面板中配置感官为其配置AI视力配置
。次要视觉半径
是角色视觉的广度。这里的检测中立方一定要打上勾,因为配置友方/敌方需要在C++
底层源码进行操刀,用蓝图较难做到。
黑板
在黑板中需要添加两个变量,分别是是否看到玩家
和要去的地方
,很明显一个是布尔值一个是向量值。
目标感知更新事件
在上面的感知组件的细节面板中可以找到目标感知更新时
这一事件,我们将他添加到事件图表中,这样就可以实时更新AI眼中的信息,这里主要用到AI是否看到玩家这一信息。
我们利用它的Break AIStimulus
中的Successfully Sensed
接口来获取AI眼中收到的刺激信息。
如果你打印出来你就会发现,这里的Successfully Sensed
的值会根据AI是否看到玩家实时变化为True
或者False
。
如果你需要运行程序,不要忘记将AI_Controller
绑定到对应的傀儡也就是ThirdPerson
的蓝图上。方法是在ThirdPerson_BP
上将类默认值中的Pawn
中的AI控制器
设置为我们的AI_Controller
。
AI 行为树
从根节点可以拖拽出两条线,分别是Selector
和Sequence
,前者表示一个二选一的分支,后者表示按顺序进行执行的序列。也就是Selector
下的子节点只会执行二者中的一个,而Sequence
会按顺序执行所有的子节点。
在行为树中添加逻辑,如果看到玩家就执行左边的任务,反之执行右边的任务,添加蓝色区域黑板变量的方法是右键Sequence
然后添加装饰器...
并添加一个BlackBoard
。
为了让两种分支分别执行不同的任务,我们就来创建一个任务。
单击图示位置并创建一个基础的任务基类,首当其冲创建一个寻找玩家的任务,在任务蓝图类里是属性的蓝图编辑界面。
利用AI_MoveTo
来移动到角色的位置,在执行完成后一定要使用Finish Execute
来告诉行为树到这里执行结束。
添加
Event Receive Execute AI
,也就是添加事件执行AI
的意思,用来接收执行该任务的AI。
同样的,添加一个任务用于AI无法找到玩家时游荡用。
在行为树中添加这些任务。
同时,在AI_Controller
开始执行的时候需要告诉系统运行哪一个行为树,下面的BTAsset
中也选择对应的行为树资产。