如何在 UE4 中用代码去控制角色移动
前言
上文中我们已经在场景中摆放好了游戏角色,接下来要做的工作就是要让游戏角色在场景中让它跑动起来,今天,我们就来实现这一功能,通过键盘的 W A S D 键来实现角色的自由跑动。
步骤
要让角色跑动的时候,有一个第三人称的视角,我们首先需要给角色添加一个摄像机。
添加摄像机
在组件中添加摄像机。
移动摄像机和角色,是的角色和摄像机的朝向都要面对着蓝色箭头。
然后保存设置。
创建 GameMode
点击 File - New Class,然后创建 GameMode,命名为 HeroGameMode,这样你的 VS 工程中就会多出一个 HeroGameMode 类。
创建 GameMode 的蓝图
回到我们的场景中,选择 Blueprints, 新建一个 HeroGameMode 蓝图。
这里命名为 BP_HeroGameMode。
指定角色蓝图
在右侧的细节面板 Classes - Default Pawn Class 中指定我们之前创建好的角色蓝图 BP_Hero。
然后保存。
设置键盘输入
点击项目设置,点击左侧面板的 input,然后按照如图所示添加按键映射。
代码控制
在 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 按键,你就可以控制角色的自由跑动啦!
最后
到这里本次的教程就结束了,接下来咱们就来复盘一下本次所说的内容。
- 添加摄像机来得到一个第三人称的视角
- 创建 GameMode 类和 GameMode 蓝图,并指定好角色蓝图
- 设置键盘输入映射
- 编写代码来映射键盘,控制角色行走
是不是很简单,好了,今天就到这吧!
我是杰少,如果您觉的我写的不错,那请给我 点赞+评论+收藏 后再走哦!
请你喝杯 ☕️ 点赞 + 关注哦~
- 阅读完记得给我点个赞哦,有👍 有动力
- 关注公众号— HelloWorld杰少,第一时间推送新姿势
最后,创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论😄~**
- 点赞
- 收藏
- 关注作者
评论(0)