UE4的AI学习(2)—官方案例实例分析

发表于2018-02-26
评论0 2.2k浏览
上一篇给大家介绍了行为树的基本概念,本篇文章就通过官方的案例继续给大家介绍行为树。官方给出的AI实例是实现一个跟随着玩家跑的AI,当玩家没有在AI视野里时,它会继续跑到最后看到玩家的地点,等待几秒后如果仍然看不到玩家,则跑回初始地点。官方的案例已经讲得比较详细,对于一些具体的函数调用,官方没有进一步讲解,本文作为官方案例的一个补充,提供给有兴趣的朋友参考。

一、整体思路分析

一个整体的思路是,用一个Service检测附近是否有出现在AI里的玩家,如果有的话,则将TargetToFollow设为该对象,然后跑向该对象(RapidMoveTo,注意,不是跑向玩家所在位置,而是跑向玩家),如果没有的话,则将TargetToFollow置为空,然后跑向(MoveTo)玩家最后出现的位置(TargetLocation),否则,跑回(MoveTo)HomeLocation。也就是说,1.建立一个Blackboard记录数据,2.需要实现一个Service来检测AI附近并且出现在AI视野里的玩家,3.实现一个Task(RapidMoveTo),使得AI跑向玩家,4.实现一个Task,使得AI跑回初始地点(MoveTo 已在引擎中实现)5.实现一个Decorator节点,判断AI是否已经离玩家的距离较近,如果较近,在停止活动。

二、每个步骤的分析

1.建立Top-Down模板,此处不再赘述。

2.建立寻路网络边界体积框,AI只会在此框内进行寻路,按p键可以查看,模板中已经存在,实际试验当中不需要添加。

3.设置角色蓝图。具体参看官网案例,比较简单,此处不再赘述。

4.设置Blackboard资源。Blackboard里,添加三个变量,即Homelocation,TargetLocation,TargetToFollow。

5.设置AIController,此处可以按照官方的案例,创建AIController的蓝图类,也可以在C++代码里创建。需要指出的是,需要在控制器里设置行为树使用的Blackboard,以及运行的行为树,并且初始化HomeLocation。C++版本与蓝图版本本质相同,以下只给出蓝图版本。
void AMyAIController::Possess(class APawn* InPawn)  
{  
    Super::Possess(InPawn);  
    AMyCharacter* Bot = Cast<AMyCharacter>(InPawn);  
    if (Bot)  
    {  
        if (Bot->BehaviorTree->BlackboardAsset)  
        {  
            BlackboardComp->InitializeBlackboard(*Bot->BehaviorTree->BlackboardAsset);  
            /* Make sure the Blackboard has the type of bot we possessed */  
            BlackboardComp->SetValueAsEnum(BotTypeKeyName, (uint8)Bot->BotType);  
        }  
        BehaviorComp->StartTree(*Bot->BehaviorTree);  
    }  
}  

或者:

6.放置AI角色,拖住蓝图脚本放进Level Editor即可。

7.设置Service节点。其中需要注意的是:
       (1)官方案例中,使用一个AI_CON_Ref的变量保存AIController的引用,可以进一步使用Event Receive Tick的AI版本,可以直接得到AIController的引用,连变量都省了。

       (2)案例中使用MultiSphereTraceForObject进行附近是否存在玩家的检测。其中的Radius是球形的半径,ObjectTypes是需要检测的类型,Actors to Igonore是不需要检测的类型。而它的检测路径如第二张图,即为一个半径为Radius的球体从Start移动到end扫过的面积。


       (3)其中的LineTraceByChannel进行线性检测,查看AI与玩家之间是否存在阻挡物。至于为什么Trace Channel要设置成Camera,是因为在默认情况下,Character不会Block Visibility,但是会阻碍Camera。可以在Character蓝图中查看相关设置。


8.Task的设置,此设置可在蓝图中进行设置,可参看官方例子,也可以在C++中进行设置,参看Shooter Game的例子。没有没有需要注意的地方,看官方文档即可,此处不再赘述。

9.Decorator的设置。

10.设置行为树。设置完行为树之后,同时开启Level编辑器界面和行为树界面可以看到行为树的运行情况。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引