介绍: B站UP主技术宅阿棍儿的转述教程视频 , 据其制作的笔记和包含自己的理解 .
原教程链接:CoopGame(课程已停止注册)
需要准备的资产:项目源文件(蓝奏云),密码:zmingu
UE版本:4.27.2
VS版本:2022
创建项目#
- 新建 游戏-> 空白 ->C++项目, 取消初学者内容包,设置项目名:CoopGame.

添加角色#
创建角色类#
- 左上角菜单栏 -> 文件 -> 新建C++类
- 创建继承
Character类的SCharacter玩家角色类,设置为public.
添加角色移动功能#
- 添加移动函数.
在 SCharacter.h 中声明移动函数
1 2 3public: void MoveForward(float Value); void MoveRight(float Value);在 SCharacter.cpp 中定义移动函数
1 2 3 4 5 6 7 8 9 10 11 12 13void ASCharacter::MoveForward(float Value) { //添加移动输入,参数1:移动方向,参数2:移动值 //这里的GetActorForwardVector()是获取角色的前方向量 AddMovementInput(GetActorForwardVector(),Value); } void ASCharacter::MoveRight(float Value) { //添加移动输入,参数1:移动方向,参数2:移动值 //这里的GetActorRightVector()是获取角色的右方向量 AddMovementInput(GetActorRightVector(),Value); } - 配置输入映射
- 项目设置→引擎→输入,添加轴映射
MoveForward,MoveRight如图
- 自问自答:为什么S键和A键的的缩放需要设置为-1?
- 项目设置→引擎→输入,添加轴映射
- 将移动的按键映射和移动函数绑定起来
在
SCharacter.cpp中的SetupPlayerInputComponent函数中进行绑定1 2 3 4 5 6 7 8 9//该函数用于将玩家的输入绑定到角色的功能上 void ASCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); //绑定轴输入,参数1:轴名称,参数2:绑定的函数 //这里的轴名称"MoveForward"和"MoveRight"就是我们刚刚在项目设置中进行配置的 PlayerInputComponent->BindAxis("MoveForward",this,&ASCharacter::MoveForward); PlayerInputComponent->BindAxis("MoveRight",this,&ASCharacter::MoveRight); }
添加角色视角转动功能#
- 添加轴映射
LookUp,Turn如图:
- 自问自答:为什么鼠标Y的缩放要设置为-1?
- 将视角转动的按键映射和视角转动的函数绑定起来
在
SCharacter.cpp中的SetupPlayerInputComponent函数中进行绑定1 2 3//该函数用于将玩家的输入绑定到角色的功能上 PlayerInputComponent->BindAxis("LookUp",this,&ASCharacter::AddControllerPitchInput); PlayerInputComponent->BindAxis("Turn",this,&ASCharacter::AddControllerYawInput);
AddControllerPitchInput和AddControllerYawInput是父类ACharacter类中用于控制视角的函数,作用是添加俯仰和偏航输入,从而实现视角的上下和左右移动。添加角色下蹲和跳跃功能#
- 添加操作映射跳跃和下蹲
Crouch,Jump如图

在 SCharacter.h 中声明
下蹲和结束下蹲(起身)函数1
2
3
//下蹲和结束下蹲函数
void BeginCrouch();
void EndCrouch();
在 SCharacter.cpp 中实现
下蹲和结束下蹲(起身)函数1
2
3
4
5
6
7
8
9
void ASCharacter::BeginCrouch()
{
Crouch();
}
void ASCharacter::EndCrouch()
{
UnCrouch();
}
- 绑定下蹲和跳跃函数
在 SCharacter.cpp 中的
SetupPlayerInputComponent函数中绑定下蹲,结束下蹲(起身),跳跃函数,结束跳跃函数1 2 3 4 5// PlayerInputComponent->BindAction("Crouch",IE_Pressed,this,&ASCharacter::BeginCrouch); PlayerInputComponent->BindAction("Crouch",IE_Released,this,&ASCharacter::EndCrouch); PlayerInputComponent->BindAction("Jump",IE_Pressed,this,&ASCharacter::Jump); PlayerInputComponent->BindAction("Jump",IE_Released,this,&ASCharacter::StopJumping);
Crouch(),UnCrouch(),Jump(),StopJumping是父类ACharacter类中的函数。这里的IE_Pressed和IE_Released是输入事件的枚举值,分别表示按下和释放按键时触发的事件为角色添加摄像机和弹簧臂#
- 创建摄像机和弹簧臂组件并初始化
在 SCharacter.h 中声明相机组件(UCameraComponent)和弹簧臂组件(USpringArmComponent)
| |
在 SCharacter.cpp 的构造函数ASCharacter()中初始化这两个组件
| |
设置角色动画#
导入虚幻商城免费资源动画初学者内容包
Animation Starter Pack,添加到我们的工程
创建继承自
SCharacterC++类的蓝图类BP_SCharacter,位置放在Blueprints中设置
网格体CharacterMesh0的骨骼网格体为默认小白人SK_Mannequin,设置位置Z为-90,旋转Z为-90,设置动画蓝图为UE4ASP_HeroTPP_AnimBlueprint
修改
UE4ASP_HeroTPP_AnimBlueprint动画蓝图的事件图表如下,实现蹲和跳跃的动画被角色类中的函数驱动。

效果测试#
创建蓝图类
BP_CoopGameGameMode,继承CoopGameGameModeBaseC++类在场景设置中设置GameMode为
BP_CoopGameGameMode,设置其中的默认Pawn类为BP_SCharacter
运行查看结果
