当前位置:网站首页>如何在 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杰少,第一时间推送新姿势
最后,创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论~**
边栏推荐
猜你喜欢

php如何查询字符串出现位置

23. 请你谈谈关于IO同步、异步、阻塞、非阻塞的区别

How to remove first character from php string

Promise Notes (1)

04、Activity的基本使用

DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计
![[Developers must see] [push kit] Collection of typical problems of push service 2](/img/70/d5127d57d2f3532deb7314d737820b.png)
[Developers must see] [push kit] Collection of typical problems of push service 2

hcip--ospf综合实验

【AGC】开放式测试示例

【HMS core】【FAQ】push kit, WisePlay DRM, Location Kit, Health Kit, 3D Modeling Kit, SignPal Kit Typical Questions Collection 4
随机推荐
【Linux Operating System】 Virtual File System | File Cache
Redis 复习计划 - Redis 数据结构和持久化机制
arcpy tutorial
tiup list
04、Activity的基本使用
华为云WeLink携手伙伴,共建协同办公生态
How to remove first character from php string
【AGC】质量服务2-性能管理示例
近段时间的学习碎片整理(24)
[TypeScript]简介、开发环境搭建、基本类型
服务器装好系统的电脑怎么分区
【AGC】质量服务1-崩溃服务示例
C#西门子S7 协议通过偏移量的方式读写PLC DB块
FME realizes the method of converting CAD with attribute to SHP data
LeetCode-283-移动零
js 切换数据源的时候该缓存checkbox选中结果并回显?
3D激光SLAM:LeGO-LOAM论文解读---特征提取部分
Data Analysis Tools - DDL operations & DML operations in HQL
围绕用户思维,木鸟与途家如何实现乡村民宿下的用户运营
数组元素逆置