UE4学习笔记----使用C++之玩家输入控制Pawn

文章目录

  • 新建Pawn
    • 创建C++类
    • .h文件
    • .cpp文件
  • 配置用户输入
    • 设置输入表
    • .h文件
    • .cpp文件
  • 将输入和Pawn进行绑定
    • 在回调函数中进行响应函数绑定
    • 响应函数用来修改变量

源代码

新建Pawn

创建C++类

UE4学习笔记----使用C++之玩家输入控制Pawn_第1张图片

.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);
}

配置用户输入

设置输入表

UE4学习笔记----使用C++之玩家输入控制Pawn_第2张图片

.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,ue4,学习,虚幻,c++,游戏引擎)