目录
引言
步骤一:创建C++类
步骤二:编写C++代码
步骤三:设置输入绑定
步骤四:在UE编辑器中测试
结论
引言
Unreal Engine(UE)以其强大的功能和灵活性在游戏开发界广受好评。本文将指导你如何在UE中通过C++创建一个基础的游戏角色,并为其添加基本的移动功能,如前进、后退、左转和右转。我们将从创建C++类开始,编写代码以实现这些功能,并在UE编辑器中测试它们。
步骤一:创建C++类
-
打开Unreal Engine Editor:启动UE4或UE5编辑器。
-
新建C++类:在UE编辑器中,选择“File” > “New C++ Class...”。
-
设置类属性:
- Parent Class:选择
ACharacter
作为父类,因为它已经包含了基础的移动组件和动画支持。 - Class Name:为你的类命名,例如
AMyCharacter
。 - Class Folder:选择或创建一个文件夹来存放你的类文件。
- 点击“Create Class”按钮。
- Parent Class:选择
步骤二:编写C++代码
在生成的AMyCharacter.h
和AMyCharacter.cpp
文件中,我们将添加代码以实现基础移动功能。
AMyCharacter.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "MyCharacter.generated.h"
UCLASS()
class YOURPROJECTNAME_API AMyCharacter : public ACharacter
{
GENERATED_BODY()
public:
// Sets default values for this character's properties
AMyCharacter();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called for forwards/backwards input
void MoveForward(float Value);
// Called for side to side input
void MoveRight(float Value);
};
AMyCharacter.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyCharacter.h"
AMyCharacter::AMyCharacter()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
// Configure character movement
GetCharacterMovement()->bOrientRotationToMovement = true; // Rotate character to face movement direction
GetCharacterMovement()->RotationRate = FRotator(0.0f, 540.0f, 0.0f); // Set the rotation rates for the character
}
void AMyCharacter::BeginPlay()
{
Super::BeginPlay();
// Additional initialization can be done here
}
void AMyCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// This is just an example, actual input handling should be done in a PlayerController or InputComponent
// Assuming we have input values from somewhere (e.g., gamepad, keyboard)
// MoveForward(InputAxisValue);
// MoveRight(InputAxisValue);
}
void AMyCharacter::MoveForward(float Value)
{
if ((Controller != nullptr) && (Value != 0.0f))
{
// Find out which way is forward
const FRotator Rotation = Controller->GetControlRotation();
const FVector Direction = FRotationMatrix(Rotation).GetUnitAxis(EAxis::X);
// Add movement in that direction
AddMovementInput(Direction, Value);
}
}
void AMyCharacter::MoveRight(float Value)
{
if ((Controller != nullptr) && (Value != 0.0f))
{
// Find out which way is right
const FRotator Rotation = Controller->GetControlRotation();
const FVector Direction = FRotationMatrix(Rotation).GetUnitAxis(EAxis::Y);
// Add movement in that direction
AddMovementInput(Direction, Value);
}
}
注意:上面的Tick
函数中的MoveForward
和MoveRight
调用只是示例,实际上你通常会在SetupPlayerInputComponent
函数中设置这些输入绑定,或者在你的PlayerController
类中处理输入。
步骤三:设置输入绑定
在AMyCharacter
类中,我们需要重写SetupPlayerInputComponent
函数来设置输入绑定。这个函数会在角色被创建时自动调用,以配置如何响应玩家的输入。
修改AMyCharacter.h
在AMyCharacter
类的声明中添加对SetupPlayerInputComponent
函数的声明(如果尚未存在):
// ...
protected:
// Function to bind player inputs
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
// ...
修改AMyCharacter.cpp
实现SetupPlayerInputComponent
函数:
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
// Bind axis movements to our custom functions
PlayerInputComponent->BindAxis("MoveForward", this, &AMyCharacter::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &AMyCharacter::MoveRight);
// Optionally, bind keys or buttons for specific actions
// PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AMyCharacter::Jump);
}
请注意,上面的"MoveForward"
和"MoveRight"
是输入轴(Axis)的名称,这些名称应该与你在UE编辑器中设置的输入轴名称相匹配,或者你可以在这里定义它们(尽管通常在项目的Project Settings
-> Input
中预先定义)。
步骤四:在UE编辑器中测试
-
编译你的项目:在UE编辑器中,点击“Compile”按钮来编译你的C++代码。
-
放置角色到场景中:在UE编辑器的内容浏览器中,找到你的
AMyCharacter
类,然后将其拖放到关卡编辑器中的场景中。 -
配置输入:如果你还没有在
Project Settings
->Input
中设置输入轴,现在需要设置。为"MoveForward"
和"MoveRight"
设置合适的输入设备(如键盘或游戏手柄)和按键/摇杆。 -
播放关卡:点击编辑器工具栏上的“Play”按钮来运行你的关卡,并测试你的角色是否按预期移动。
结论
通过上述步骤,你应该已经成功在Unreal Engine中使用C++创建了一个基础的游戏角色,并为其添加了基本的移动功能。这只是UE中C++编程的一个起点,你可以继续探索更复杂的角色行为、物理交互、AI控制等高级功能。