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在干嘛了。嗯,调试视角很重要。
// 在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。
打开动画蓝图,在「事件图表」里,我们需要一个简单的状态机:
- Idle(待机)
- Walk(走路)
- 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();
}
OnPossess 函数。这个函数在Controller控制Pawn时触发。我一般在这里初始化行为树,比在事件开始运行里更可靠。
最后,别忘了在项目设置里,把默认Pawn类设为 BP_AICharacter,默认AI Controller类设为 BP_AIController。这样你拖一个角色到场景里,它自动就有AI了。
2.5 验证一下
把 BP_AICharacter 拖到场景中。点击运行。你应该能看到:
- 角色出现在场景里
- 动画播放(至少待机动画在动)
- 你可以用WASD控制它(如果你把输入绑到了Pawn上)
如果角色不动,检查一下:
- AI Controller有没有生成?
- 动画蓝图有没有指定骨骼?
- 输入映射有没有生效?
嗯,环境搭建就是这样。看起来琐碎,但每一步都踩实了,后面写行为树的时候你会感谢自己的。
下一章,我们开始真正接触行为树的核心节点。准备好了吗?
公众号:蓝海资料掘金营,微信deep3321