如何在 UE4 中用代码去控制角色移动

举报
HelloWorld杰少 发表于 2022/07/30 15:58:07 2022/07/30
【摘要】 前言上文中我们已经在场景中摆放好了游戏角色,接下来要做的工作就是要让游戏角色在场景中让它跑动起来,今天,我们就来实现这一功能,通过键盘的 W A S D 键来实现角色的自由跑动。 步骤要让角色跑动的时候,有一个第三人称的视角,我们首先需要给角色添加一个摄像机。 添加摄像机在组件中添加摄像机。移动摄像机和角色,是的角色和摄像机的朝向都要面对着蓝色箭头。然后保存设置。 创建 GameMode点...

前言

上文中我们已经在场景中摆放好了游戏角色,接下来要做的工作就是要让游戏角色在场景中让它跑动起来,今天,我们就来实现这一功能,通过键盘的 W A S D 键来实现角色的自由跑动。

步骤

要让角色跑动的时候,有一个第三人称的视角,我们首先需要给角色添加一个摄像机。

添加摄像机

在组件中添加摄像机。

image

移动摄像机和角色,是的角色和摄像机的朝向都要面对着蓝色箭头。

image

然后保存设置。

创建 GameMode

点击 File - New Class,然后创建 GameMode,命名为 HeroGameMode,这样你的 VS 工程中就会多出一个 HeroGameMode 类。

image

创建 GameMode 的蓝图

回到我们的场景中,选择 Blueprints, 新建一个 HeroGameMode 蓝图。

image

这里命名为 BP_HeroGameMode。

image

指定角色蓝图

在右侧的细节面板 Classes - Default Pawn Class 中指定我们之前创建好的角色蓝图 BP_Hero。

image

然后保存。

设置键盘输入

点击项目设置,点击左侧面板的 input,然后按照如图所示添加按键映射。

image

代码控制

在 vs 中上文生成的 Hero 类中,添加如下代码:

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Hero.generated.h"

UCLASS()
class ACTOREXAMPLE_API AHero : public ACharacter
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	AHero();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;


	void MoveForward(float amount);

	void MoveBack(float amount);

	void MoveLeft(float amount);

	void MoveRight(float amount);

	void Yaw(float amount);

	void Pitch(float amount);
};

// Fill out your copyright notice in the Description page of Project Settings.


#include "Hero.h"

// Sets default values
AHero::AHero()
{
 	// 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;

}

// Called when the game starts or when spawned
void AHero::BeginPlay()
{
	Super::BeginPlay();
	
}

// Called every frame
void AHero::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

// Called to bind functionality to input
void AHero::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);
	PlayerInputComponent->BindAxis("Forward", this, &AHero::MoveForward);
	PlayerInputComponent->BindAxis("Back", this, &AHero::MoveBack);
	PlayerInputComponent->BindAxis("Left", this, &AHero::MoveLeft);
	PlayerInputComponent->BindAxis("Right", this, &AHero::MoveRight);
	PlayerInputComponent->BindAxis("Yaw", this, &AHero::Yaw);
	PlayerInputComponent->BindAxis("Pitch", this, &AHero::Pitch);
}

void AHero::MoveForward(float amount)
{
	if (Controller && amount)
	{
		FVector fwd = GetActorForwardVector();
		AddMovementInput(fwd, amount);
	}
}

void AHero::MoveBack(float amount)
{
	if (Controller && amount)
	{
		FVector back = -GetActorForwardVector();
		AddMovementInput(back, amount);
	}
}

void AHero::MoveLeft(float amount)
{
	if (Controller && amount)
	{
		FVector left = -GetActorRightVector();
		AddMovementInput(left, amount);
	}
}

void AHero::MoveRight(float amount)
{
	if (Controller && amount)
	{
		FVector right = GetActorRightVector();
		AddMovementInput(right, amount);
	}
}

void AHero::Yaw(float amount)
{
	if (Controller && amount)
	{
		AddControllerYawInput(200.0f * amount * GetWorld()->GetDeltaSeconds());
	}
}

void AHero::Pitch(float amount)
{
	if (Controller && amount)
	{
		AddControllerPitchInput(200.0f * amount * GetWorld()->GetDeltaSeconds());
	}
}

这样引擎就会检测到我们之前配置的按键输入,按下 W 键,就会去调用类中的 MoveForward 函数,其他的几个按键也是如此。

运行

按下 Play 后,通过控制 W A S D 按键,你就可以控制角色的自由跑动啦!

image

最后

到这里本次的教程就结束了,接下来咱们就来复盘一下本次所说的内容。

  1. 添加摄像机来得到一个第三人称的视角
  2. 创建 GameMode 类和 GameMode 蓝图,并指定好角色蓝图
  3. 设置键盘输入映射
  4. 编写代码来映射键盘,控制角色行走

是不是很简单,好了,今天就到这吧!

我是杰少,如果您觉的我写的不错,那请给我 点赞+评论+收藏 后再走哦!

请你喝杯 ☕️ 点赞 + 关注哦~

  1. 阅读完记得给我点个赞哦,有👍 有动力
  2. 关注公众号— HelloWorld杰少,第一时间推送新姿势

最后,创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论😄~**

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。