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

【HMS core】【FAQ】push kit、WisePlay DRM、Location Kit、Health Kit、3D Modeling Kit、SignPal Kit典型问题合集4

【Linux Operating System】 Virtual File System | File Cache

Qt 容器控件Tool Box 使用详解

Why is there no data reported when the application is connected to Huawei Analytics in the application debugging mode?

Goland 开启文件保存自动进行格式化

Public Key Retrieval is not allowed报错解决方案

FME实现CAD带属性转SHP数据方法

3D激光SLAM:LeGO-LOAM论文解读---实验对比

php如何去除字符串最后一位字符

几种常见的存储器
随机推荐
应用OPC解决方案实现控制系统数据的安全交换
详解最实用的几种dll注入方式
Large-scale integrated office management system source code (OA+HR+CRM) source code sharing for free
数组元素逆置
UI测试新方法:视觉感知测试详解
Google engineer "code completion" tool; "Transformers NLP" accompanying book code; FastAPI development template; PyTorch model acceleration tool; cutting-edge papers | ShowMeAI News Daily
[flutter]什么是MaterialApp和Material design
五只小猪的案例(五只小猪 比较体重的大小)
Qt 容器控件之Tab Widget 使用详解
大厂高管借钱炒股,亏到破产卖房。。。
Is Redis really slow?
在树莓派上驱动CSI摄像头
CAD几个优化设置
481-82 (105, 24, 82, 34, 153),
hcip--ospf综合实验
node.js中怎么连接redis?
应用接入华为分析在应用调试模式下为何没有数据上报?
PCIE入门
【HMS core】【FAQ】push kit、AR Engine、广告服务、扫描服务典型问题合集2
php如何查询字符串出现位置