返回

打造真实互动游戏体验的UE 4 C++角色操控指南【教程】

前端

前言

在游戏开发中,角色操控是至关重要的环节。在本文中,我们将使用UE 4 C++创建一个具有碰撞和粒子特效的角色,并学习如何使用键盘控制角色移动和跳跃。

教程步骤

  1. 创建新项目
  • 打开 UE 4 编辑器,创建一个新的 C++ 项目。
  • 将项目命名为“MyCPPGame”并选择一个存储位置。
  • 点击“创建项目”按钮。
  1. 创建新 C++ 类
  • 在项目浏览器中,右键单击“源代码”文件夹,然后选择“新建”>“C++ 类”。
  • 将类命名为“MyCharacter”并点击“创建类”按钮。
  1. 继承 UPawnMovementComponent
  • 在“MyCharacter.h”头文件中,在 public 继承列表中添加 UPawnMovementComponent。
#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"

UCLASS()
class MYCPPGAME_API AMyCharacter : public APawn
{
    GENERATED_BODY()

public:
    // Initialize the character
    AMyCharacter();

    // Called to bind functionality to input
    virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
};
  1. 实现构造函数
  • 在“MyCharacter.cpp”cpp文件中,实现构造函数。
#include "MyCharacter.h"

AMyCharacter::AMyCharacter()
{
    // Create a spring arm component for the camera
    SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
    SpringArm->SetupAttachment(RootComponent);

    // Create a camera component
    Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
    Camera->SetupAttachment(SpringArm);

    // Set the base pawn movement properties
    GetMovementComponent()->UpdatedComponent = GetCapsuleComponent();
    GetMovementComponent()->InitialSpeed = 600.0f;
    GetMovementComponent()->MaxSpeed = 1200.0f;
    GetMovementComponent()->JumpZVelocity = 1000.0f;
    GetMovementComponent()->AirControl = 0.80f;

    // Set the capsule size
    GetCapsuleComponent()->SetCapsuleHalfHeight(88.0f);
    GetCapsuleComponent()->SetCapsuleRadius(34.0f);

    // Enable collision
    GetCapsuleComponent()->SetCollisionProfileName(TEXT("Pawn"));

    // Create a particle system for the jump effect
    JumpParticles = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("JumpParticles"));
    JumpParticles->SetupAttachment(GetCapsuleComponent());
}
  1. 设置玩家输入
  • 在“MyCharacter.cpp”cpp文件中,实现 SetupPlayerInputComponent 函数以绑定键盘控制。
void AMyCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{
    // Bind the move forward action to the W key
    PlayerInputComponent->BindAxis("MoveForward", this, &AMyCharacter::MoveForward);
    // Bind the move right action to the D key
    PlayerInputComponent->BindAxis("MoveRight", this, &AMyCharacter::MoveRight);
    // Bind the jump action to the Space key
    PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AMyCharacter::Jump);
}
  1. 移动角色
  • 在“MyCharacter.cpp”cpp文件中,实现 MoveForward 和 MoveRight 函数以移动角色。
void AMyCharacter::MoveForward(float Value)
{
    // Get the forward vector of the camera
    FVector ForwardVector = Camera->GetForwardVector();

    // Remove the Z component of the forward vector
    ForwardVector.Z = 0.0f;

    // Normalize the forward vector
    ForwardVector.Normalize();

    // Move the character forward
    AddMovementInput(ForwardVector, Value);
}

void AMyCharacter::MoveRight(float Value)
{
    // Get the right vector of the camera
    FVector RightVector = Camera->GetRightVector();

    // Remove the Z component of the right vector
    RightVector.Z = 0.0f;

    // Normalize the right vector
    RightVector.Normalize();

    // Move the character right
    AddMovementInput(RightVector, Value);
}
  1. 跳跃
  • 在“MyCharacter.cpp”cpp文件中,实现 Jump 函数以使角色跳跃。
void AMyCharacter::Jump()
{
    // Check if the character is on the ground
    if (GetMovementComponent()->IsFalling())
    {
        // Play the jump sound
        UGameplayStatics::PlaySound2D(this, JumpSound);

        // Spawn the jump particles
        JumpParticles->ActivateSystem();

        // Jump
        LaunchCharacter(FVector(0.0f, 0.0f, 1000.0f), false, true);
    }
}
  1. 编译和运行游戏
  • 在主工具栏中,点击“编译”按钮。
  • 在主工具栏中,点击“运行”按钮。

总结

在本文中,我们创建了一个具有碰撞、粒子特效和键盘操控的角色。希望本教程对您有所帮助,也期待您在游戏开发领域取得更大的成就!