UE5学习笔记17-让人物的视线和鼠标移动时的方向一致,并且不让人物模型旋转,只改变视线方向

一、创建标准动画帧

        1.我想让人物在装备武器后根据鼠标的移动方向改变人物的视线方向,并且人物模型不会改变朝向

        2.我的动画中存在一个四个方向瞄准的动画,将左下,坐上,左转,右上,右下,右转,中上,中下,中,的动画的某一帧保留,具体流程如下(记得复制一份动画资源,可以直接ctrl+w拷贝一份),在创建一份标准动画,就是刚进入游戏的人物的朝向,我是面向前方的动画

        3.打开动画,将动画的资产详情中选择选择的网格体,选择选择的动画帧后在进行后续操作,我当前的动画在第10帧时中上的画面,在第十帧右键将0到10帧的画面移除

移除前

移除后 

在去掉第一帧到最后一帧的动画 

 如图

        4.重复3的步骤将9个方向的某一帧动画都保存出来

二、 迁移项目

        1.完成结果(AimA0文件夹放的时瞄准时的动画,HipA0文件夹放的是不拿武器时的动画,Zero命名的动画和A0_CC命名的动画是一样的,之后会知道怎么使用)

 

         2.当前的动画我实在UE4版本中保存的,UE4的骨骼资产不在UE5中,将UE4的骨骼资产移动到Assert文件夹中(可能需要和UE5的骨骼资产保持一定的相对的路径)

        3.点击移动后界面还会有一个相同的文件夹,可以不用管它,迁移AimOffset文件夹,当前文件夹中都是第一步中3制作的动画资产,迁移时只迁移AimOffset文件夹如下图2。

 图二

         4.将资产放到当前项目的content文件夹中

三、 创建瞄准偏移

        1.在动画文件夹(自己找个自己能记住放在那里的地方就行)中单机右键->动画->瞄准偏移

        2.在瞄准偏移中将刚才的动画添加到如图的位置上,将水平轴和垂直轴改成如图所示的样子

 图中左侧时A0_LC的动画

        3.将资产详情向下拉 将附加设置中的预览基础姿势设置为Zero的资产

        4.将水平和垂直轴设置成-90—+90是因为人物在摄像头不动时左右有90°的旋转可以按住ctrl在中间界面的下方界面移动鼠标查看效果(可以将视角移动到角色后方如上图)

四、添加代码

        1.在动画蓝图的C++代码中添加Yaw和Pitch两个变量,之后镜头旋转和角色旋转会用到

        2.在动画蓝图的C++的CPP中 NativeUpdateAnimation函数中添加(Blasetr时角色的类的指针)

	A0_Yaw = BlasterCharacter->GetA0_YAW();A0_Pitch = BlasterCharacter->GetA0_Pitch();

        3.在角色类台添加两个获得对应变量的函数

        xxx.h

	FORCEINLINE float GetA0_YAW() const { return A0_Yaw; };FORCEINLINE float GetA0_Pitch() const { return A0_Pitch; };/** begin 瞄准偏移量 */float A0_Yaw;float A0_Pitch;/** end 瞄准偏移量 *//** 当前角色旋转的角度  */ FRotator StartingAimRotation;/** 当前角色旋转的角度  */void AimOffset(float DeltaTime); // 计算瞄准时的偏移量

        xxx.cpp 该函数在Tick函数中调用头文件需要#include "Kismet/KismetMathLibrary.h"是个数学库的头文件,if语句中只是当前的判断条件,不同状况下记得更改条件

void ABlasterCharacter::AimOffset(float DeltaTime)
{if (Combat && Combat->EquippedWeapon == nullptr) return;/* 只想获得平面上xy的速度的向量,将z方向的速度置为0 */FVector Velocity = GetVelocity();Velocity.Z = 0.f;/* 获得速度的向量 */float Speed = Velocity.Size();bool bIsInAir = GetMovementComponent()->IsFalling();// 当前状态是站立的状态if (Speed == 0.f && !bIsInAir){FRotator CurrentAimRotation = FRotator(0.f, GetBaseAimRotation().Yaw, 0.f);FRotator DeltaAimRotation = UKismetMathLibrary::NormalizedDeltaRotator(CurrentAimRotation, StartingAimRotation);A0_Yaw = DeltaAimRotation.Yaw;bUseControllerRotationYaw = false; // 控制器旋转(false) 效果是当鼠标进行移动时,角色的朝向不会和鼠标的移动方向一致}//当前状态是奔跑或跳跃if (Speed > 0.f || bIsInAir){StartingAimRotation = FRotator(0.f,GetBaseAimRotation().Yaw,0.f);A0_Yaw = 0.f;bUseControllerRotationYaw = true; // 控制器旋转(true)}A0_Pitch = GetBaseAimRotation().Pitch;if (A0_Pitch > 90.f && !IsLocallyControlled()){// 将pitch从[270 , 360) 映射到[ -90 , 0 ) 由于在多人游戏中UE5会将数据压缩封包,将值变成一个正数发送到服务器上,所以需要一个映射FVector2D InRange(270.f, 360.f);FVector2D OutRange(-90.f, 0.f);A0_Pitch = FMath::GetMappedRangeValueClamped(InRange, OutRange, A0_Pitch);}
}

        4.代码的一些补充,当存在两个以上的客户端时(或一个客户端一个服务器),UE5会将客户端的角度进行数据压缩发送到服务器上,只需要知道服务器上收到的都是正数需要做映射即可关于为什么是270.f到360.f做的映射可以通过UE_LOG函数调试时看一下pitch输出的值(时客户端移动在服务器上接受到的值)找到对应的边界。

五、动画蓝图中的改变

        1.打开动画蓝图,将动画缓存到缓存中

        2.创建新的状态机,添加新的状态节点

        3.节点中如图,A0_Yaw和A0_Pitch是三中添加的C++的代码通过右键可以获得红色的同理

 

         4.骨骼的分层混合,当鼠标移动时只是上半身移动,所以需要分层混合

        5. 节点配置

        6.对应骨骼节点(spine_01)

        7.最后的动画蓝图样子(白色的通过右键输入Comment/注释可以找到)

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

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

相关文章

Android - 音频参数合入

音频参数宏观来看分为两部分,audio和music。不管是哪个平台都需要分别合入这两部分。 A10 music参数 相关工程师调试后会提供 audio_para 文件,将该文件替换至对应工程下的文件编译即可 例: device/sprd/sharkle/sl8541e_1h10_32b/rootdir/system/et…

程序员失业跑滴滴,意外自学AI绘画成主业,月入过万不是梦!

一、突如其来的裁员 那是一个阴沉的下午,我像往常一样,在公司忙碌着。突然,HR叫我去会议室,告诉我由于公司业务调整,我所在的部门被整体裁撤。作为一名程序员,我从未想过自己会面临失业的困境。拿着那份补偿…

大语言模型-PDF文档解析

PDF解析能够提升大语言模型系统的信息处理能力和应用范围,为用户提供更加便捷、高效、个性化的服务体验。本文介绍三种常用的pdf解析方式:Open Parse、pdfplumber、PyMuPD。 一、Open Parse Open Parse是一个能够直观地识别文档布局并有效地对其进行分…

mac安装java17(jdk17)

1. 下载jdk17 官网下载:https://www.oracle.com/java/technologies/downloads 2. 直接安装 安装完后目录会存放在下面目录下 /Library/Java/JavaVirtualMachines 111111deMBP JavaVirtualMachines % ls jdk-11.0.227 jdk-17.jdk 3. 如果你已经安装过java&#…

kafka的12个重要概念

kafka的12个重要概念 1、服务器broker1.1、Broker 的主要功能1.2、Kafka Broker 的架构1.3、配置和管理1.4、高可用性和负载均衡1.5、总结 2、主题topic2.1、主要特点 3、事件Event4、生产者producer4.1、主要功能4.2、Producer 的配置选项4.3、Producer 的工作流程4.4、总结 5…

网页,html,Web端实现RTSP/RTMP实时推流视频和播放

随着技术的不断发展,实时流传输已经成为许多应用的重要组成部分。RTSP(Real-Time Streaming Protocol)作为一种实时流媒体传输协议,广泛应用于视频监控、直播等领域。然而,在Web端实现RTSP实时推流视频播放却面临一些挑…

谈下日本IT业现状以及未来的发展

日本IT业现状 市场规模与增长率: 根据最新数据,日本IT行业的市场规模在不断扩大。例如,2022年日本IT行业的总市值达到了约4500亿美元,年复合增长率约为3.5%。这表明该行业在经济中占据重要地位,并持续保持增长态势。就…

我忘记给我的代码备份了。。。。。。

ok啊,历经1个月,这个项目总算是快写完啦!很烧脑,写这个脑细胞都不知道噶了多少,哎~ 虽然目前还有很大一部分可以改进,我觉得以我目前的能力能写成这样已经很不错了,还是学艺不精啊~ 实际上的话…

分享一个基于python新闻订阅与分享平台flask新闻发布系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

SpringBoot集成kafka开发-消息消费的分区策略(消费者如何判断从哪个分区中消费消息的?)

这里写目录标题 1、kafak消息者消费消息的4种分区策略2、kafka默认的消费分区策略1-RangeAssignor(均匀分配、默认分配策略)2.1、代码验证RangeAssignor的消息分区策略2.1.1、消费者2.1.2、生产者2.1.3、kafak配置类2.1.4、对象实体类2.1.5、项目配置文件…

卸载通过pip安装的所有Python包的详细指南

卸载所有通过pip安装的Python包的方法总结(Windows系统) 方法 1: 使用 pip freeze 和 requirements.txt 步骤: 导出依赖到requirements.txt文件: pip freeze > requirements.txt这个命令会将当前环境中所有已安装的Python包及其版本号输出到requirem…

Django | 从中间件的角度来认识Django发送邮件功能

文章目录 概要中间件中间件 ---> 钩子实现中间件demo 邮件发送过程Django如何做邮件服务配置流程 中间件结合邮件服务实现告警 概要 摘要 业务告警 邮件验证 密码找回 邮件告警 中间件 中间件 —> ‘钩子’ 例如 访问路由 的次数【请求】 中间件类须实现下列五个方法…

ubuntu系统在线安装下载firefox-esr流览器

1、在线firefox流览器 Firefox ESR(Extended Support Release)是火狐浏览器的长期支持版本,针对同一个主版本提供一年左右的安全性与稳定性支持。如果您因为火狐浏览器改版而导致有原本能用的功能变得不能使用的话(例如Firefox 64.0把RSS订阅的功能拿掉了)&#xf…

【持续更新】1DM+ 17.1 Pro 号称安卓上的 idm,下载超快!最新免费高级修改版

这款安卓平台上的下载管理器,号称安卓上的 idm,堪称最快。 其下载速度比普通下载快高达 500%,有以下特点: • 无广告干扰 • 提供深色与浅色主题选择 • 支持直接下载至SD卡(Android 4.4版本除外) • 具备…

文献阅读:Pathway Ensemble Tool癌症通路和治疗法的无偏发现

介绍 正确地识别生物途径的扰动是揭示基本疾病机制和发展急需的治疗策略的关键步骤。然而,目前的工具是否最优化用于无偏发现相关途径仍然不清楚。在这里,我们创建了“基准测试”(Benchmark)来严格评估现有工具,并发现…

5步掌握Python Django+Vue二手房项目,实现房价预测与知识图谱系统

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

【SpringBoot】电脑商城-07-上传头像

基于SpringMVC的文件上传 1 MultipartFile接口 MultipartFile接口常用的的API见下表: 方法功能描述String getOriginalFilename()获取上传文件的原始文件名,即该文件在客户端中的文件名boolean isEmpty()判断上传的文件是否为空,当没有选择…

1-Wired一线式总线

常见的几种通信接口 一线式总线 定义 一线式:说明CPU和外设之间数据通信只需一根信号线,此信号线必然是数据线,并且数据线连接了一个上拉电阻,默认为高电平串行:说明CPU和外设的数据通信一个时钟周期传输一个bit位 问:没有时钟…

GoWeb 设置别名和多环境配置

别名 vite.config.ts中添加代码如下即可 //设置别名resolve: {alias: {"": path.resolve(process.cwd(),"src"),//用替代src}}随后即可使用 配置多环境 vite.config.ts中添加代码如下 envDir: ./viteenv,//相对路径随后在项目根目录创建对应的viteenv…

WEB渗透Win提权篇-RDPFirewall

渗透测试60w字全套md笔记:夸克网盘分享 爆破RDP Hydra爆破RDP >hydra -l admin -P /root/Desktop/passwords -S 192.168.0.0 rdpNlbrute MSF开启 >run post/windows/manage/enable_rdp多用户登陆 Mimikatz设置允许多用户登录 >privilege::debug >t…