当前位置: 首页 > news >正文

《UE5_C++多人TPS完整教程》学习笔记31 ——《P32 角色移动(Character Movement)》


本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P32 角色移动(Character Movement)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。


文章目录

  • P32 角色移动
  • 32.1 修改输入映射并绑定到角色蓝图类上
  • 32.2 Summary


P32 角色移动

本节课将为我们创建的第三人称射击游戏角色蓝图类进行输入配置(包括操作映射和轴映射),并将它们绑定到角色蓝图类上,以实现角色的移动功能。
在这里插入图片描述


32.1 修改输入映射并绑定到角色蓝图类上

  1. 在虚幻引擎中打开项目 “Blaster” 的 “项目设置” 窗口,找到 “引擎 - 输入” 选项卡,可以看到我们在迁移资产时自动创建的一些操作映射和轴映射。
    在这里插入图片描述

  2. 删除这些操作映射和轴映射,并添加新的操作映射和轴映射。
    在这里插入图片描述

  3. 在 VS 中打开 “BlasterCharacter.h”,声明与上述轴映射相对应的函数为 “ABlasterCharacter” 类的保护成员函数。

    ...UCLASS()
    class BLASTER_API ABlasterCharacter : public ACharacter
    {...protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;/* P32 角色移动(Character Movement)*/// 与轴映射相对应的函数void MoveForward(float Value);	// 角色前进或后退void MoveRight(float Value);	// 角色左移或右移void Turn(float Value);			// 角色视角左转或右转void LookUp(float Value);		// 角色俯视或仰视/* P32 角色移动(Character Movement)*/private:UPROPERTY(VisibleAnywhere, Category = Camera)	class USpringArmComponent* CameraBoom;			// 添加弹簧臂组件,归类为 “Camera”UPROPERTY(VisibleAnywhere, Category = Camera)class UCameraComponent* FollowCamera;			// 添加摄像机组件,归类为 “Camera”public:	};

    在头文件中鼠标左键单击函数名,即可出现 在这里插入图片描述 按钮,鼠标左键单击该按钮,就可以在弹出的下拉菜单栏中选择快速创建函数的定义到 cpp 文件。
    在这里插入图片描述

  4. 在 “BlasterCharacter.cpp” 中完成与轴映射相对应的函数的定义。

    /* P32 角色移动(Character Movement)*/
    // 角色前进或后退
    void ABlasterCharacter::MoveForward(float Value)
    {if (Controller != nullptr && Value != 0.f) {// const FVector Direction = GetActorForwardVector();							// 使用 GetActorForwardVector() 获取的是角色胶囊体的前后方向向量,而我们想要通过获取角色控制器的前后方向向量来控制角色前进const FRotator YawRotation(0.f, Controller->GetControlRotation().Yaw, 0.f);		// 获取角色控制器的航向const FVector Direction(FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X));	// 使用角色控制器的航向获取前后方向向量。// FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X) 可以获取 FRotationMatrix 在 X 轴上的向量AddMovementInput(Direction, Value);												// 添加移动输入,移动方向为角色控制器的前后方向}
    }// 角色左移或右移
    void ABlasterCharacter::MoveRight(float Value)
    {if (Controller != nullptr && Value != 0.f) {const FRotator YawRotation(0.f, Controller->GetControlRotation().Yaw, 0.f);		// 获取角色控制器的航向const FVector Direction(FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y));	// 使用角色控制器的航向获取左右方向向量。AddMovementInput(Direction, Value);												// 添加移动输入,移动方向为角色控制器的左右方向}
    }// 角色视角左转或右转
    void ABlasterCharacter::Turn(float Value)
    {AddControllerYawInput(Value);	// 添加角色控制器的航向输入
    }// 角色视角俯视或仰视
    void ABlasterCharacter::LookUp(float Value)
    {AddControllerPitchInput(Value);	// 获取角色控制器的俯仰输入
    }
    /* P32 角色移动(Character Movement)*/
    

    注意这里要了解 “pitch”、“yaw”、“roll” 三个欧拉角的含义,便于看懂代码,可以参阅《pitch、yaw、roll三个角的区别》

  5. 在 “BlasterCharacter.cpp” 的 “SetupPlayerInputComponent()” 函数中将角色跳跃对应的函数 “ACharacter::Jump” 与相应的操作映射进行绑定,然后将上述与轴映射相对应的函数与轴映射进行绑定。最后进行编译即可。

    // Called to bind functionality to input
    void ABlasterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
    {Super::SetupPlayerInputComponent(PlayerInputComponent);/* P32 角色移动(Character Movement)*/// 绑定操作映射PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);// 绑定轴映射PlayerInputComponent->BindAxis("MoveForward", this, &ABlasterCharacter::MoveForward);PlayerInputComponent->BindAxis("MoveRight", this, &ABlasterCharacter::MoveRight);PlayerInputComponent->BindAxis("Turn", this, &ABlasterCharacter::Turn);PlayerInputComponent->BindAxis("LookUp", this, &ABlasterCharacter::LookUp);/* P32 角色移动(Character Movement)*/	
    }
    
  6. 在虚幻引擎中打开关卡 “Lobby” ,点击上方工具栏的 “播放”(▶)按钮,可以观察到我们能够使用键盘和鼠标控制角色的移动和视角,但是角色的移动和视角变化都很僵硬,这是因为我们还没有为角色添加动画。
    在这里插入图片描述
    在这里插入图片描述


32.2 Summary

本节课修改输入映射(包括操作映射和轴映射),并定义了与其对应的 C++ 函数,然后绑定到角色蓝图类上,实现了使用键盘和鼠标控制角色移动和视角的功能。
在这里插入图片描述


相关文章:

《UE5_C++多人TPS完整教程》学习笔记31 ——《P32 角色移动(Character Movement)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P32 角色移动(Character Movement)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者&…...

怎么使用jwt,token以及redis进行续期?

怎么使用jwt,token以及redis进行续期? 什么是jwt? 什么是token? 结合 JWT、Token 和 Redis 进行续期的一般步骤: 生成 JWT: 用户登录成功后,服务器生成一个 JWT,并返回给客户端。 import io.jsonwebtok…...

AI日报:北大Open Sora视频生成更强了;文心一言可以定制你自己的声音;天工 SkyMusic即将免费开放;

🤖📱💼AI应用 北大Open Sora视频生成更强了!时长可达10秒,分辨率更高 【AiBase提要:】 ⭐️ Open-Sora-Plan v1.0.0模型发布 显著提升视频生成质量和文本控制能力 ⭐️ 支持华为昇腾910b芯片,提升运行效率和质量。 ⭐…...

替换空格(替换特定字符)

😀前言 在字符串处理中,经常会遇到需要替换特定字符的情况。本文将介绍一道经典的字符串替换问题:将字符串中的空格替换成 “%20”。我们将探讨一种高效的解决方法,通过倒序遍历字符串来实现原地替换,避免额外空间的开…...

ctfshow web入门 php特性 web123--web139

web123 必须传CTF_SHOW,CTF_SHOW.COM 不能有fl0g 在php中变量名字是由数字字母和下划线组成的,所以不论用post还是get传入变量名的时候都将空格、、点、[转换为下划线,但是用一个特性是可以绕过的,就是当[提前出现后,…...

pta L1-002 打印沙漏

L1-002 打印沙漏 分数 20 全屏浏览 切换布局 作者 陈越 单位 浙江大学 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ************ *****所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中…...

【简单讲解下PHP AES加解密示例】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

设计模式总结-外观模式(门面模式)

外观模式 模式动机模式定义模式结构外观模式实例与解析实例一:电源总开关实例二:文件加密 模式动机 引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦…...

LiveGBS流媒体平台GB/T28181常见问题-系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤

LiveGBS系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤 1、系统服务日志1.1、日志目录1.2、配置日志文件个数及记录时间1.3、配置日志文件路径 2、Web 操作日志2.1、配置保留天数2.2、配置不记录操作日志2.1.1、不记录所有2.1.2、不记录指定…...

es6:set()和weakset()

一、Map() 1.1 简介 ES6 提供了 Set 数据结构&#xff0c;它类似于数组&#xff0c;但是值是唯一没有重复的。 我们可以通过 new Set()去创建它。 1.2. Set的创建、设置与获取 <script> const set new Set(); console.log(set.add(1)); //Set { 1 } …...

C#仿OutLook的特色窗体设计

目录 1. 资源图片准备 2. 设计流程&#xff1a; &#xff08;1&#xff09;用MenuStrip控件设计菜单栏 &#xff08;2&#xff09;用ToolStrip控件设计工具栏 &#xff08;3&#xff09;用StatusStrip控件设计状态栏 &#xff08;4&#xff09;ImageList组件装载树节点图…...

Jmeter的使用

Jmeter的使用 1.Jmeter简介 以下内容来自Jmeter中文网http://www.jmeter.com.cn/jieshao&#xff0c;很好的解释了Jmeter的作用&#xff1a; Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xf…...

【蓝桥杯第十届省赛B】(部分详解)

特别数的和 #include <iostream> #include <string> using LLlong long; using namespace std;int main() {LL n;cin >> n;LL cnt 0;for (LL i 1; i < n; i) {string s to_string(i);for (LL j 0; j < s.size(); j) {if (s[j] 2 || s[j] 0 || s…...

计算机研究生规划

一、计算机研究生技术栈 两条腿走路: 左侧工程实践能力&#xff1a;要掌握python编程语言&#xff0c;它和机器学习、神经网络&#xff08;这两门几乎是必须掌握的技能&#xff09;的学习有很大关系 右侧学术创新能力 二、编程语言能力提升 左边基础&#xff0c;右边教你写…...

针孔相机、鱼眼相机、全景相机

先进性简述&#xff0c;后续慢慢会补充1. 针孔相机&#xff1a; 针孔相机是一种基于针孔成像原理的传统相机&#xff0c;它使用一个非常小的孔径&#xff08;即“针孔”&#xff09;来限制光线进入相机的方式。 这种相机通常具有简单的结构&#xff0c;由一个孔径较小的光学元…...

HTML5+CSS3+JS小实例:圣诞按钮

实例:圣诞按钮 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…...

【深度学习基础】

打基础日常记录 CNN基础知识1. 感知机2. DNN 深度神经网络&#xff08;全连接神经网络&#xff09;DNN 与感知机的区别DNN特点&#xff0c;全连接神经网络DNN前向传播和反向传播 3. CNN结构【提取特征分类】4. CNN应用于文本 RNN基础1. RNN的本质 词向量模型word2Vec1. 自然语言…...

银行业架构网络BIAN (Banking IndustryArchitecture Network)详细介绍

BIAN ( The Banking Industry Architecture Network) 是一个业界多方协作的非营利性组织&#xff0c;由全球领先银行、技术提供商、顾问和学者组成&#xff0c;定义了一个用以简化和标准化核心银行体系结构的银行技术框架。这一框架基于面向服务的架构 (SOA) 原则&#xff0c;银…...

[尚硅谷 flink] 基于时间的合流——双流联结(Join)

文章目录 8.1 窗口联结&#xff08;Window Join&#xff09;8.2 **间隔联结&#xff08;Interval Join&#xff09;** 8.1 窗口联结&#xff08;Window Join&#xff09; Flink为基于一段时间的双流合并专门提供了一个窗口联结算子&#xff0c;可以定义时间窗口&#xff0c;并…...

怎样恢复已删除的照片?教你3个方法,一键恢复!

很多人喜欢以拍照的形式记录生活&#xff0c;手机里的照片就很容易堆积成山&#xff0c;但当内存不够用时就不得不选择删除。可是这些美好的照片始终是很多人心中抹不去的记忆&#xff0c;那么该怎样恢复已删除的照片呢&#xff1f;下面几招&#xff0c;教你一键恢复&#xff0…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上&#xff0c;在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库&#xff0c;Redis 的键值对中的 key 就是字符串对象&#xff0c;而 val…...

新版NANO下载烧录过程

一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…...

视觉slam--框架

视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图&#xff1f; 建图并没有一个固定的形式和算法…...