2、环境搭建与项目准备:创建Unreal AI项目、配置输入与Pawn、导入基础动画资源、设置AI Controller

好,咱们正式开始动手了。

这一章说白了就是打地基。地基稳不稳,直接决定你后面几十章能不能顺利跑起来。我见过太多同学,AI逻辑写了一半,发现项目设置有问题,或者动画蓝图没连对,回头再改,那叫一个痛苦。

所以,咱们一步到位。把环境搭好,后面只管写行为树就行。

2.1 创建Unreal AI项目

打开Unreal Engine,我建议直接用 5.3 或以上版本。为什么?因为行为树和状态机的编辑器在5.x系列里稳定很多,而且C++模板也更干净。

创建项目时,选「游戏」→「空白」模板。别选带角色模板的,那些东西反而碍事。我们自己从头搭,心里有数。

我的习惯:项目命名用英文,别带空格。比如 AI_Combat_Demo。中文路径在Unreal里偶尔会抽风,别给自己找麻烦。

项目创建好后,第一件事:打开「编辑」→「项目设置」,在「地图与模式」里,把默认游戏模式重载为咱们自己的。不过先别急,等我们建好Pawn和Controller再说。

2.2 配置输入与Pawn

AI项目也需要输入?当然。调试的时候你得控制角色吧?或者让AI跟随玩家输入做测试。我一般会保留一套基础的输入映射。

打开「项目设置」→「输入」,添加以下操作映射:

操作名称 按键 说明
MoveForward W / S 前后移动
MoveRight A / D 左右移动
Turn 鼠标X 旋转视角
LookUp 鼠标Y 上下视角

接下来创建Pawn。右键点击内容浏览器,选「蓝图类」→「Pawn」,命名为 BP_AICharacter

打开这个蓝图,添加一个骨骼网格体组件。我习惯用小白人(UE自带的Mannequin),但如果你有自定义模型,直接拖进去也行。

注意:如果你用的是小白人,记得把网格体的「动画蓝图」先清空。我们后面会自己连。不然它会用默认的动画,跟咱们的AI逻辑打架。

然后添加一个弹簧臂和摄像机。这样你就能在测试时看到AI在干嘛了。嗯,调试视角很重要。

// 在C++中,你也可以这样写:
// AMyAIPawn.h
UPROPERTY(VisibleAnywhere)
class USkeletalMeshComponent* MeshComp;

UPROPERTY(VisibleAnywhere)
class USpringArmComponent* SpringArm;

UPROPERTY(VisibleAnywhere)
class UCameraComponent* Camera;

2.3 导入基础动画资源

动画资源怎么来?我推荐两种方式:

  • 官方商城:搜「Animation Starter Pack」,免费,动作全。
  • Mixamo:Adobe家的,下载FBX直接导入,注意骨骼要匹配。

导入后,你会得到一堆动画序列。别急着全拖进蓝图。先建一个动画蓝图,命名为 ABP_AICharacter

打开动画蓝图,在「事件图表」里,我们需要一个简单的状态机:

  1. Idle(待机)
  2. Walk(走路)
  3. Run(跑步)

每个状态之间用速度变量过渡。我习惯在动画蓝图里暴露一个 Speed 变量,类型为float。然后在事件蓝图里每帧更新它。

关键点:记得在「动画蓝图」的类设置里,把「骨骼网格体」指定为你的模型。不然它不知道给谁做动画。

我曾经犯过一个低级错误:动画蓝图建好了,但忘了指定骨骼,结果角色站那一动不动,我还以为是AI逻辑写错了……排查了半天。

2.4 设置AI Controller

终于到核心了。AI Controller是AI的大脑。没有它,行为树就是个空壳。

右键创建蓝图类,父类选 AIController,命名为 BP_AIController

打开它,在「事件开始运行」节点里,我们做两件事:

  • 运行行为树
  • 设置感知系统(后面章节细讲)

先简单点:拖一个「运行行为树」节点,指定一个行为树资产。但我们还没建行为树呢,所以先留空。后面章节会补上。

然后回到 BP_AICharacter,在它的「事件开始运行」里,调用 SpawnDefaultController。这样角色一生成,AI Controller就会自动附加上去。

// C++版本示例:
// AMyAIPawn.cpp
void AMyAIPawn::BeginPlay()
{
    Super::BeginPlay();
    SpawnDefaultController();
}
小技巧:你可以在AI Controller里重写 OnPossess 函数。这个函数在Controller控制Pawn时触发。我一般在这里初始化行为树,比在事件开始运行里更可靠。

最后,别忘了在项目设置里,把默认Pawn类设为 BP_AICharacter,默认AI Controller类设为 BP_AIController。这样你拖一个角色到场景里,它自动就有AI了。

2.5 验证一下

BP_AICharacter 拖到场景中。点击运行。你应该能看到:

  • 角色出现在场景里
  • 动画播放(至少待机动画在动)
  • 你可以用WASD控制它(如果你把输入绑到了Pawn上)

如果角色不动,检查一下:

  • AI Controller有没有生成?
  • 动画蓝图有没有指定骨骼?
  • 输入映射有没有生效?

嗯,环境搭建就是这样。看起来琐碎,但每一步都踩实了,后面写行为树的时候你会感谢自己的。

下一章,我们开始真正接触行为树的核心节点。准备好了吗?


公众号:蓝海资料掘金营,微信deep3321