源代码
新建Pawn
创建C++类

.h文件
配置变量属性
// 将该变量开放给引擎编辑
UPROPERTY(EditAnywhere)
UStaticMeshComponent* OurVisibleComponent;
.cpp文件
实例化各类对象
// Sets default values
AMyPawn::AMyPawn()
{
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
// 设置当前的Pawn由哪个玩家控制
AutoPossessPlayer = EAutoReceiveInput::Player0;
// 创建可附加内容的虚拟根组件
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("One"));
// 创建相机
UCameraComponent* OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("Two"));
// 创建可见对象
OurVisibleComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Three"));
// 将相机附加到根组件,
// 偏移并旋转相机
OurCamera->SetupAttachment(RootComponent);
OurCamera->SetRelativeLocation(FVector(-250.0f, 0.0f, 250.0f));
OurCamera->SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f));
// 将可见对象附加到根组件
OurVisibleComponent->SetupAttachment(RootComponent);
}
配置用户输入
设置输入表

.h文件
定义输入函数和相关变量
// 用于接收输入的函数
void MoveX(float Value);
void MoveY(float Value);
void StartG();
void StopG();
// 当前输入的变量
FVector CurrentVelocity;
bool bGrowing;
.cpp文件
- 缩放代码
- 移动代码
// 逐帧调用
void AMyPawn::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// 根据bGrowign标志来进行增长和缩短
{
float CurrentScale = OurVisibleComponent->GetComponentScale().X;
if (bGrowing)
{
// 增大
CurrentScale += DeltaTime;
}
else
{
// 缩小
CurrentScale -= (DeltaTime * 0.5f);
}
// 设置缩放的最小和最大
CurrentScale = FMath::Clamp(CurrentScale, 1.0f, 2.0f);
OurVisibleComponent->SetWorldScale3D(FVector(CurrentScale));
}
// 根据用户输入来进行pawn移动
{
if (!CurrentVelocity.IsZero())
{
FVector NewLocation = GetActorLocation() + (CurrentVelocity * DeltaTime);
SetActorLocation(NewLocation);
}
}
}
将输入和Pawn进行绑定
#include "MyPawn.h"
// 相机组件
#include "Camera/CameraComponent.h"
// 静态网格组件
#include "Components/StaticMeshComponent.h"
// 输入头文件
#include "Components/InputComponent.h"
在回调函数中进行响应函数绑定
// 输入和函数进行绑定的回调
void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
// 将ParticleToggle按键的按下和松开的操作与函数进行绑定
PlayerInputComponent->BindAction("ParticleToggle", IE_Pressed, this, &AMyPawn::StartG);
PlayerInputComponent->BindAction("ParticleToggle", IE_Released, this, &AMyPawn::StopG);
// 对两个轴的操作与函数进行绑定
PlayerInputComponent->BindAxis("MoveForward", this, &AMyPawn::MoveX);
PlayerInputComponent->BindAxis("MoveRight", this, &AMyPawn::MoveY);
}
响应函数用来修改变量
void AMyPawn::MoveX(float Value)
{
// 以最大100单位/秒的速度进行前后移动
CurrentVelocity.X = FMath::Clamp(Value, -1.0f, 1.0f) * 100.f;
}
void AMyPawn::MoveY(float Value)
{
// 以最大100单位/秒的速度进行左右移动
CurrentVelocity.Y = FMath::Clamp(Value, -1.0f, 1.0f) * 100.f;
}
void AMyPawn::StartG()
{
bGrowing = true;
}
void AMyPawn::StopG()
{
bGrowing = false;
}
本文是关于UE4游戏引擎的学习笔记,重点讲解如何使用C++来控制Pawn对象响应玩家输入。首先,介绍了新建Pawn类的过程,包括在.h和.cpp文件中配置变量属性和实例化对象。接着,详细阐述了配置用户输入的步骤,如设置输入表,并在.h文件中定义输入函数。最后,讲解如何在回调函数中绑定响应函数,以根据玩家输入修改Pawn的状态。

3704

被折叠的 条评论
为什么被折叠?



