目录
效果
步骤
一、绘制道路
二、创建出生点和路径点
三、生成敌人
四、敌人沿着路径点移动
效果
步骤
一、绘制道路
首先绘制一条道路,后面希望敌人会沿着这条绘制道路行走。
二、创建出生点和路径点
2.1 新建父类为Actor的蓝图,作为敌人出生点,命名为“BP_EnemyBirthPlace”
将其放置在视口中玩家出生的位置
2.2 再创建一个父类为Actor的蓝图,作为敌人在道路上移动的路径点,命名为“BP_EnemyPathPoint”
在视口中将“BP_EnemyPathPoint”放置在每一个道路的拐点处
2.3 有了路径点之后,我们就需要让每一个路径点知道它的下一个路径点是谁
打开“BP_EnemyPathPoint”,添加一个变量“NextPathPointActor”
变量类型为其自身(“BP_EnemyPathPoint”)的对象引用
勾选可编辑实例和生成时公开
2.4 在大纲中选中场景中的第一个路径点,然后去设置NextPathPointActor,即选择下一个路径点是哪个Actor
这里设置第一个路径点的下一个路径点是“BP_EnemyPathPoint2”,然后以此类推,设置每一个路径点的下一个路径点的是哪一个Actor。
2.5 我们也要告诉出生点那个Actor,敌人从它那里生成后走的下一个路径点是哪个Actor,方法和之前同理。打开“BP_EnemyBirthPlace”,新建一个变量命名为“FirstPathPointActor”
变量类型也是“BP_EnemyPathPoint”的对象引用。
然后在视口中选中出生点,设置“FirstPathPointActor”为第一个路径点的那个Actor
三、生成敌人
打开“TaFangGameMode”
首先在事件图表中获取到敌人出生点的那个Actor
将获取到的actor作为变量,变量命名为“EnemyBirthPlaceActor”
生成具有AIController的Enemy1
新建一个整型变量“NumOfSpawnEnemy1”,用于记录当前已经生成Enemy1的数量
然后每生成一次就将变量“NumOfSpawnEnemy1”加1
判断敌人生成的数量是否>20,如果没有到达20个就继续生成敌人。
可以看到此时已经能够在出生点生成敌人
四、敌人沿着路径点移动
4.1 打开“TotalEnemyCategory”(所有敌人的父类)
新建一个变量命名为“BirthPlace”
变量类型为“BP_EnemyBirthPlace”的对象引用
4.2 打开“TaFangGameMode”,添加如下节点。将获取到的出生点的Actor传递给敌人总类中的变量“BirthPlace”
4.3 回到蓝图“TotalEnemyCategory”
此时变量“BirthPlace”已经被赋予了具体的对象(即“BP_EnemyBirthPlace”)
那么我们就可以获得其中的“FirstPathPointActor”
然后就可以让敌人移动到“FirstPathPointActor”所处的位置
那么如何让敌人不断的移动到下一个路径点的位置呢?我们可以新建一个变量,命名为“NextPathPoint”
变量类型为“BP_EnemyPathPoint”的对象引用
当我们获取到第一个路径点Actor的时候我们就可以将其设置为“NextPathPoint”
当敌人移动完成后,我们又可以获取到“BP_EnemyPathPoint”中的变量“NextPathPointActor”,并把该变量赋予“NextPathPoint”
将变量“NextPathPoint”转换为有效的Get,以此来判断是否能够有效的获取到下一个路径点Actor
如果能有效获取,就不断获取下一个路径点Actor,然后让敌人走到这个Actor所处的位置
4.4 为了让敌人动起来,我们还需向视口中增加“导航网格体边界体积”,从而让AI知道哪些地方可以走
扩大“导航网格体边界体积”覆盖区域
按P键显示AI可以被导航的真实区域
此时如果直接运行游戏的话,可以看到报如下错误
这因为在“TaFangGameMode”中,还没来得及将获取到“EnemyBirthPlaceActor”传递给蓝图“TotalEnemyCategory”
我们只需在“TotalEnemyCategory”中加一段延迟即可。
运行效果如文章开头所示。