介绍: B站UP主技术宅阿棍儿的转述教程视频 , 据其制作的笔记和包含自己的理解 .
原教程链接:CoopGame(课程已停止注册)
需要准备的资产:项目源文件(蓝奏云),密码:zmingu
UE版本:4.27.2
VS版本:2022
创建项目#
- 新建 游戏-> 空白 ->C++项目, 取消初学者内容包,设置项目名:CoopGame.
添加角色#
创建角色类#
- 左上角菜单栏 -> 文件 -> 新建C++类
- 创建继承
Character
类的SCharacter
玩家角色类,设置为public
.
添加角色移动功能#
- 添加移动函数.
在 SCharacter.h 中声明移动函数
1 2 3
public: void MoveForward(float Value); void MoveRight(float Value);
在 SCharacter.cpp 中定义移动函数
1 2 3 4 5 6 7 8 9 10 11 12 13
void 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
,添加到我们的工程创建继承自
SCharacter
C++类的蓝图类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
运行查看结果