NPC移动
2023年10月29日 2023年11月17日
设置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 Key
为Location1
- 为Sequence添加任务Wait
设置Details > Wait > Wait Time
为2 - 为Sequence添加任务MoveTo
设置Details > Blackboard > Blackboard Key
为Location2
- 为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)