(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动

目录

AIMoveTo控制AI

1.创建Character类型蓝图

2.记录AI的初始位置,提升为变量

3.AutoWalk自定义事件

4.停止移动

完成

行为树控制AI

1.新建Character类型蓝图命名为AI_Character

2.黑板命名为MyBlackboard

3.新建行为树命名为MyBT

4.新建AIController类型蓝图命名为AI_Controller_Mine(需要在所有类中搜索)

完成


所谓的两种方式,准确的来说应该是使用和不使用行为树实现AI的移动

NavMeshBoundsVolume

不管用什么方法必须用导航体积包裹整个地图,选中该体积之后按P可以查看包裹的体积

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第1张图片

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第2张图片

AIMoveTo控制AI 

实际上,让AI移动的最主要的节点就是AIMoveTo,直接通过这种方式控制AI比较简单,我们实现角色进入AI身边时AI开始移动

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第3张图片

 

1.创建Character类型蓝图

随意改变一下外观

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第4张图片

增加一个球形碰撞,半径设置成300或者400(添加这个球形碰撞是为了节省资源,我们不需要这个机器人一直走动,只要进入玩家视野范围的时候进行走动,当然还有其它方式实现,我们这里使用这种简单粗暴的方式实现)

‘’

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第5张图片

取消勾选HiddeninGame以便我们在游戏中看到这个体积的边缘

2.记录AI的初始位置,提升为变量

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第6张图片

3.AutoWalk自定义事件

让AI随机的在开始位置的两侧进行移动,移动完成后延迟1秒再次调用这个函数

创建一个IsCanRun Bool类型变量用来中断这个函数

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第7张图片

4.停止移动

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第8张图片

完成

回到场景中,我们拖放一个AI_Character到场景中

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第9张图片

这个Actor千万不能放到导航体积里面,会导致无法移动

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第10张图片

这里只是先测试一下ai的移动,后面再进行一定修改

行为树控制AI

我们需要4个资源

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第11张图片

1.新建Character类型蓝图命名为AI_Character

随意增加几个Mesh修改一下外观

一定要设置Character的AIControllerClass。点击组件中的AI_Character然后在细节面板中设置AIControllerClass为刚才创建的AI_Controller_Mine

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第12张图片  (蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第13张图片

2.新建黑板命名为MyBlackboard

黑板用于保存一些关键数据,对于AI移动的关键数据便是初始坐标

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第14张图片

新建两个键值

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第15张图片

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第16张图片

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第17张图片

3.新建行为树命名为MyBT

点击上面的新建任务(可以看到可以新建3种类型的蓝图,可以简单的理解,任务Task,作为树的叶子,相对比较务实,主要负责执行一定实际的事件;装饰器Decorator和服务Services都要依附在Task上,装饰器就是条件语句,服务用于定期更新黑板上的数据,更加专业详细的行为树介绍见官方文档)

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第18张图片

然后会在存放行为树的文件夹下生成一个Task,重命名为MyWalkTask

新建一个BlackboardKey类型的变量命名为HomeLocation,默认值为None

添加AIMoveTo节点,FinishExecute节点,CastToAI_Controller_Mine节点

按下图连接,作用是执行一次让AI移动到HomeLocation某一边。和上面基本上差不多这里我们没有角色检测。

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第19张图片

回到行为树

首先添加一个Selector节点和Wait节点,Wait节点修改WaitTime等待时间为1秒

搜索刚才创建的Task,放到Wait左边(行为树中的节点是按照从左往右的顺序执行,可以看到每一个节点右上角有执行序号)

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第20张图片

行为树补充:

Selector

Selector 节点从左至右执行其子项

其中一个子项达成后将停止执行其子项。(只要子项成功一个就不执行后面的)

如 Selector 的子项达成,则 Selector 也达成。

如 Selector 的所有子项未达成,则 Selector 未达成。

Sequence

Sequence 节点从左至右执行其子项

如其中一个子项未达成,将停止执行执行其子项。(只要失败一个就结束)

如子项未达成,则 Sequence 也未达成。

如 Sequence 的所有子项均达成,则 Sequence 也达成。

4.新建AIController类型蓝图命名为AI_Controller_Mine(需要在所有类中搜索)

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第21张图片

新建两个Name名称类型变量,并设置默认值为对应名称

(蓝图)虚幻4制作超级马里奥(八)两种方法实现AI移动_第22张图片

总结:

AIController有黑板和行为树,行为树有Task,我们把Character的AIController设置成这个AIController,那么这个Character就能实现行为树中的行为。理清楚行为树的使用流程,应该就可以很好的使用了。

移动主要是靠AIMoveTo这个节点。

移动只是一种行为,攻击,跳跃,放技能等等行为都如出一辙

行为树?决策树?

 

 

你可能感兴趣的:(虚幻4重制超级马里奥)