《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++ 函数,然后绑定到角色蓝图类上,实现了使用键盘和鼠标控制角色移动和视角的功能。
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/601478.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习笔记 - 深度学习遇到超大图像怎么办?使用 xT 对极大图像进行建模论文简读

作为计算机视觉研究人员,在处理大图像时,避免不了受到硬件的限制,毕竟大图像已经不再罕见,手机的相机和绕地球运行的卫星上的相机可以拍摄如此超大的照片,遇到超大图像的时候,我们当前最好的模型和硬件都会达到极限。 所以通常我们在处理大图像时会做出两个次优选择之一:…

苍穹外卖10(Spring Task定时任务,WebSocket双向通信,订单状态定时处理,来电提醒,客户催单)

目录 一、Spring Task 1. 介绍 2. 入门 1 使用步骤 2 使用示例 3. 详解 1 Scheduled注解 2 cron表达式 1 cron表达式6个域 2 各个域的取值说明 4. 小结 二、订单状态定时处理 1. 需求分析 1 问题分析 2 功能需求 2. 代码开发 1 修改引导类加EnableScheduling …

Azure的VFP和虚拟IP地址

Azure 的Virtual filtering platform (VFP) 是Azure 网络地址转换,端口转换和端口分配的基础。 下面我们来深入介绍一下VFP的工作方式。 VFP的出站动作。 对于客户端地址作为虚拟IP的出站目的地址的时候,VFP 驱动会负责做以下两个动作。 源地址转换。端口地址转换。VFP 和 S…

转让山东不良资产处置公司变更时间和变更要求

您好,我们有家山东的不良资产处置公司转让,大家都知道不良资产处置公司现在全国都是注册不了的,只有收购现成的,所以有需要经营的可以联系我,我们有家现成无经营的不良资产处置公司转让,包变更法人股东&…

提升自媒体写作效率:7款必备工具推荐! #知识分享#媒体#AI写作

我们做自媒体运营,想要快速的创作内容,提供文章的创作速度是我们的目标,我们别的大佬可以很快地就创作出一篇内容,而自己墨迹半天确出不了一个字呢?其实这关乎到创作技巧,下面小编就跟大家分享如何利用自媒…

电网的正序参数和等值电路(二)

本篇为本科课程《电力系统稳态分析》的笔记。 本篇这一章的第二篇笔记。上一篇传送门,下一篇传送门。 三相线路的正序电纳 线路的电导 线路的电导反映的是导线上施加电压后的电晕现象和绝缘子中产生的泄露电流的参数。一般情况线路绝缘良好,泄露电流…

《最佳实践之》GPS NMEA-0183 协议, 解析 $GPRMC 协议

一,了解 GPS NMEA-0183 协议 需要基础物联网对接知识,需要对解析协议有一定认识。 如果不知道怎么连接硬件,请看我的另一篇博客:https://blog.csdn.net/Crazy_Cw/article/details/126613967 这篇文章只说明,如何解析协…

1.C++编译过程

1.Linux 如何安装 C 编译环境 (1)安装 gcc 下载:sudo apt install gcc g 安装:gcc/g -v/--version其中 gcc 用于编译 C ,g 用于编译 C 版本要 >4.8.5 这样才能使用 C11 的特性 (2) 使用…

springboot 反射调用ServiceImpl时报错:java.lang.NullPointerExceptio、,mapper为null【解决方法】

springboot 反射调用ServiceImpl时报错:java.lang.NullPointerException、mapper为null【解决方法】 问题描述问题分析解决方案创建SpringBootBeanUtil编写调用方法 executeMethod调用 总结 问题描述 在使用Spring Boot时,我们希望能够通过反射动态调用…

JS 全选反选取消

html&#xff1a; <div><div><a href"#">全选</a><a href"#">反选</a><a href"#">取消</a></div><label><input type"checkbox" value"苹果" name"bo…

ArcGIS和ArcGIS Pro快速加载ArcGIS历史影像World Imagery Wayback

ArcGIS在线历史影像网站 World Imagery Wayback(网址:https://livingatlas.arcgis.com/wayback/)提供了数期历史影像在线浏览服务,之前不少自媒体作者在文中宣称其能代表Google Earth历史影像。 1、一点对比 (1)同一级别下的版本覆盖面 以下述区域为例,自2014年2月20…

如何使用vscode启动Flask并实现无公网IP远程访问内网服务

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…