六一的部落格


关关难过关关过,前路漫漫亦灿灿。




设置NPC


蓝图

BP_STUAICharacter

Details > Pawn

  • 勾选 Auto Possess AI
  • 设置 AI Controller Class



C++

STUAICharacter

1#include "AI/STUAIController.h"
2
3ASTUAICharacter::ASTUAICharacter(const FObjectInitializer &ObjInit) : Super(ObjInit)
4{
5    AutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;
6    AIControllerClass = ASTUAIController::StaticClass();
7}

囊括NPC移动范围

  • 使用NavMeshBoundsVolume标识NPC可移动区域

    Place Actors > Volumes > NavMeshBoundsVolume


  • 设置NavMeshBoundsVolume体积: 长宽高均要考虑设置

    Details > Brush Settings


  • 查看

    按下 P 显示 / 隐藏


    Unreal Editor > Preference > General > Keyboard Shortcuts > Show Flags Menu > Show Navigation 修改快捷键



方法一: 在AIController中使NPC移动

添加节点 AIMoveTo , 在 BeginPlay 后执行



方法二: 使用行为树和黑板资产


添加黑板变量

BB_STUCharacter

添加Vector变量Location1和Location2



设置行为树

BT_STUCharacter


设置匹配的黑板资产

Details > BehaviorTree > Blackboard Asset



添加Sequence节点

  • 为Sequence添加任务MoveTo

    设置 Details > Blackboard > Blackboard KeyLocation1
  • 为Sequence添加任务Wait

    设置 Details > Wait > Wait Time 为2
  • 为Sequence添加任务MoveTo

    设置 Details > Blackboard > Blackboard KeyLocation2
  • 为Sequence添加任务Wait

    设置 Details > Wait > Wait Time 为2



设置黑板变量

BP_STUAIController

添加节点: SetValueAsVector

  • 添加节点: GetBlackboard; 获取黑板资产, 连到 SetValueAsVector > Target
  • 添加节点: MakeLiteralName; 传入黑板变量名, 连到 SetValueAsVector > Key Name
  • 设置Vector值



运行行为树


蓝图

BP_STUAIController

添加节点: RunBehaviorTree; 在BeginPlay之后执行; 需设置BTAsset



C++

  • 添加属性: 保存行为树信息

    STUAICharacter
    1class UBehaviorTree;
    2
    3UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
    4UBehaviorTree *BehaviorTreeAsset;
  • 运行行为树

    控制器每次切换控制Pawn, 执行对应的行为树

    STUAIController
     1#include "AI/STUAICharacter.h"
     2
     3void ASTUAIController::OnPossess(APawn *InPawn)
     4{
     5    Super::OnPossess(InPawn);
     6
     7    const auto STUCharacter = Cast<ASTUAICharacter>(InPawn);
     8    if (STUCharacter)
     9    {
    10        RunBehaviorTree(STUCharacter->BehaviorTreeAsset);
    11    }
    12}

查看AI调试信息

  • 按下 ' 显示 / 隐藏 界面


  • 按下小写键盘数字 关闭 / 打开 指定类别调试信息

  • 建议在新窗口运行游戏, Character Preview无阻挡

    Modes > New Editor Window(PIE)


NPC移动



设置NPC


蓝图

BP_STUAICharacter

Details > Pawn

  • 勾选 Auto Possess AI
  • 设置 AI Controller Class



C++

STUAICharacter

1#include "AI/STUAIController.h"
2
3ASTUAICharacter::ASTUAICharacter(const FObjectInitializer &ObjInit) : Super(ObjInit)
4{
5    AutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;
6    AIControllerClass = ASTUAIController::StaticClass();
7}

囊括NPC移动范围

  • 使用NavMeshBoundsVolume标识NPC可移动区域

    Place Actors > Volumes > NavMeshBoundsVolume


  • 设置NavMeshBoundsVolume体积: 长宽高均要考虑设置

    Details > Brush Settings


  • 查看

    按下 P 显示 / 隐藏


    Unreal Editor > Preference > General > Keyboard Shortcuts > Show Flags Menu > Show Navigation 修改快捷键



方法一: 在AIController中使NPC移动

添加节点 AIMoveTo , 在 BeginPlay 后执行



方法二: 使用行为树和黑板资产


添加黑板变量

BB_STUCharacter

添加Vector变量Location1和Location2



设置行为树

BT_STUCharacter


设置匹配的黑板资产

Details > BehaviorTree > Blackboard Asset



添加Sequence节点

  • 为Sequence添加任务MoveTo

    设置 Details > Blackboard > Blackboard KeyLocation1
  • 为Sequence添加任务Wait

    设置 Details > Wait > Wait Time 为2
  • 为Sequence添加任务MoveTo

    设置 Details > Blackboard > Blackboard KeyLocation2
  • 为Sequence添加任务Wait

    设置 Details > Wait > Wait Time 为2



设置黑板变量

BP_STUAIController

添加节点: SetValueAsVector

  • 添加节点: GetBlackboard; 获取黑板资产, 连到 SetValueAsVector > Target
  • 添加节点: MakeLiteralName; 传入黑板变量名, 连到 SetValueAsVector > Key Name
  • 设置Vector值



运行行为树


蓝图

BP_STUAIController

添加节点: RunBehaviorTree; 在BeginPlay之后执行; 需设置BTAsset



C++

  • 添加属性: 保存行为树信息

    STUAICharacter
    1class UBehaviorTree;
    2
    3UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
    4UBehaviorTree *BehaviorTreeAsset;
  • 运行行为树

    控制器每次切换控制Pawn, 执行对应的行为树

    STUAIController
     1#include "AI/STUAICharacter.h"
     2
     3void ASTUAIController::OnPossess(APawn *InPawn)
     4{
     5    Super::OnPossess(InPawn);
     6
     7    const auto STUCharacter = Cast<ASTUAICharacter>(InPawn);
     8    if (STUCharacter)
     9    {
    10        RunBehaviorTree(STUCharacter->BehaviorTreeAsset);
    11    }
    12}

查看AI调试信息

  • 按下 ' 显示 / 隐藏 界面


  • 按下小写键盘数字 关闭 / 打开 指定类别调试信息

  • 建议在新窗口运行游戏, Character Preview无阻挡

    Modes > New Editor Window(PIE)