跳过正文

CoopGame01-创建玩家

··1975 字·4 分钟
目录
coopgame - 这篇文章属于一个选集。
§ 1: 本文

介绍: B站UP主技术宅阿棍儿的转述教程视频 , 据其制作的笔记和包含自己的理解 .

原教程链接:CoopGame(课程已停止注册)

需要准备的资产:项目源文件(蓝奏云),密码:zmingu

UE版本:4.27.2

VS版本:2022

创建项目
#

  1. 新建 游戏-> 空白 ->C++项目, 取消初学者内容包,设置项目名:CoopGame.
    1-tuya.webp

添加角色
#

创建角色类
#

  1. 左上角菜单栏 -> 文件 -> 新建C++类
  2. 创建继承Character类的SCharacter玩家角色类,设置为public.
    2.webp

添加角色移动功能
#

  1. 添加移动函数.
    在 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);  
    }
    
  2. 配置输入映射
    • 项目设置→引擎→输入,添加轴映射MoveForward,MoveRight如图
      3.webp
    • 自问自答:为什么S键和A键的的缩放需要设置为-1?
  3. 将移动的按键映射和移动函数绑定起来
    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);  
    }
    

添加角色视角转动功能
#

  1. 添加轴映射LookUp,Turn如图:
    4.png
    • 自问自答:为什么鼠标Y的缩放要设置为-1?
  2. 将视角转动的按键映射和视角转动的函数绑定起来
    SCharacter.cpp 中的 SetupPlayerInputComponent 函数中进行绑定
    1
    2
    3
    
    //该函数用于将玩家的输入绑定到角色的功能上  
    PlayerInputComponent->BindAxis("LookUp",this,&ASCharacter::AddControllerPitchInput);  
    PlayerInputComponent->BindAxis("Turn",this,&ASCharacter::AddControllerYawInput);
    
上面绑定的AddControllerPitchInputAddControllerYawInput是父类ACharacter类中用于控制视角的函数,作用是添加俯仰偏航输入,从而实现视角的上下和左右移动。

添加角色下蹲和跳跃功能
#

  1. 添加操作映射跳跃和下蹲Crouch,Jump如图

5.webp
2. 添加下蹲和结束下蹲函数

在 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();
    }

  1. 绑定下蹲和跳跃函数
    在 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_PressedIE_Released是输入事件的枚举值,分别表示按下和释放按键时触发的事件

为角色添加摄像机和弹簧臂
#

  1. 创建摄像机和弹簧臂组件并初始化
SCharacter.h 中声明相机组件(UCameraComponent)弹簧臂组件(USpringArmComponent)
1
2
3
4
5
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
class UCameraComponent* CameraComp;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
class USpringArmComponent* SpringArmComp;
SCharacter.cpp 的构造函数ASCharacter()中初始化这两个组件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*添加摄像机和弹簧臂组件引用*/
#include "Camera/CameraComponent.h"
#include "GameFramework/SpringArmComponent.h"

ASCharacter::ASCharacter()  
{  
    PrimaryActorTick.bCanEverTick = true;  
    //创建一个默认子对象,命名为SpringArmComp,类型为USpringArmComponent  
    SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComp"));  
  
    //使用角色的控制旋转来调整弹簧臂的方向,也就是让弹簧臂跟随角色的视角旋转  
    SpringArmComp->bUsePawnControlRotation = true;  
  
    //将弹簧臂组件附加到角色的根组件上,这样弹簧臂就会跟随角色的位置和旋转  
    SpringArmComp->SetupAttachment(RootComponent);  
  
    //创建一个默认子对象,命名为CameraComp,类型为UCameraComponent  
    CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComp"));  
  
    //将摄像机组件附加到弹簧臂组件上,这样摄像机就会跟随弹簧臂的位置和旋转  
    CameraComp->SetupAttachment(SpringArmComp);  
}

设置角色动画
#

  1. 导入虚幻商城免费资源动画初学者内容包Animation Starter Pack,添加到我们的工程

    6.webp

  2. 创建继承自SCharacterC++类的蓝图类BP_SCharacter,位置放在Blueprints

  3. 设置网格体CharacterMesh0的骨骼网格体为默认小白人SK_Mannequin,设置位置Z为-90,旋转Z为-90,设置动画蓝图UE4ASP_HeroTPP_AnimBlueprint

    2025-09-02_142014.png

  4. 修改UE4ASP_HeroTPP_AnimBlueprint动画蓝图的事件图表如下,实现蹲和跳跃的动画被角色类中的函数驱动。

可以直接复制下面的蓝图 , 然后粘贴到你的编辑器哦

hm757v7fae.webp

效果测试
#

  1. 创建蓝图类BP_CoopGameGameMode,继承CoopGameGameModeBaseC++类

  2. 在场景设置中设置GameMode为BP_CoopGameGameMode,设置其中的默认Pawn类为BP_SCharacter

    9.webp

  3. 运行查看结果

    10.gif

coopgame - 这篇文章属于一个选集。
§ 1: 本文