当前位置:网站首页>如何在 UE4 中用代码去控制角色移动
如何在 UE4 中用代码去控制角色移动
2022-07-30 16:04:00 【华为云】
前言
上文中我们已经在场景中摆放好了游戏角色,接下来要做的工作就是要让游戏角色在场景中让它跑动起来,今天,我们就来实现这一功能,通过键盘的 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 valuesAHero::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 spawnedvoid AHero::BeginPlay(){ Super::BeginPlay(); }// Called every framevoid AHero::Tick(float DeltaTime){ Super::Tick(DeltaTime);}// Called to bind functionality to inputvoid 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杰少,第一时间推送新姿势
最后,创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论~**
边栏推荐
猜你喜欢

Redis 复习计划 - Redis 数据结构和持久化机制

rhce笔记2

新人学习小熊派网络应用开发

How to remove first character from php string

【HMS core】【Media】【视频编辑服务】 在线素材无法展示,一直Loading状态或是网络异常

【Linux操作系统】 虚拟文件系统 | 文件缓存

DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计

围绕用户思维,木鸟与途家如何实现乡村民宿下的用户运营
![[flutter] What is MaterialApp and Material design](/img/72/d0845467b33b2291f47e7f54171088.jpg)
[flutter] What is MaterialApp and Material design

Moonbeam创始人解读多链新概念Connected Contract
随机推荐
C# List<T> 模板的案例
Huawei ADS reports an error when obtaining conversion tracking parameters: getInstallReferrer IOException: getInstallReferrer not found installreferrer
FME实现CAD带属性转SHP数据方法
开源WebGIS架构
nodejs environment variable settings
Load Base Split usage documentation
游戏多开检测的几种实现方法及破解方法参考
[NCTF2019]Fake XML cookbook-1|XXE漏洞|XXE信息介绍
Wuhan Star Sets Sail: Overseas warehouse infrastructure has become a major tool for cross-border e-commerce companies to go overseas
rhce笔记2
Database - SQL
Shell脚本的概念
Promise Notes (1)
新技术要去做新价值
几种常见的存储器
Leetcode 118. 杨辉三角
配置Path环境变量
rhce笔记1
3D激光SLAM:LeGO-LOAM论文解读---特征提取部分
云风:不加班、不炫技,把复杂的问题简单化