【ue5】滑铲系统蓝图笔记

大致逻辑如下:
在这里插入图片描述
在这里插入图片描述

一、导入动画

  • 滑铲
  • 蹲待机
  • 蹲行走

导入到文件夹中
可以右键设置颜色,便于区分。
在这里插入图片描述

二、调整动画

1.启动根运动

启动根运动后,人物才可以位移,不然只能在原地。
打开动画序列,勾选启用根运动Enabled root motion.
在这里插入图片描述

2.创建蒙太奇

对动画序列右键创建动画蒙太奇,用户释放技能时播放。
在这里插入图片描述
在这里插入图片描述

3.调整蒙太奇

因为我们要延长滑铲的时间,现在我们的滑铲蒙太奇是滑铲后站起来,但是我们只需要滑铲这个动作。
在这里插入图片描述

找到刚刚开始滑铲的时间,调整蒙太奇结束时间=0.71。现在我们的末尾动作就是滑铲。
在这里插入图片描述

4.设置循环

现在你可以看到人物一直滑铲后站起来再继续滑铲。
右键新建一个蒙太奇片段Create New Montage,名字为“循环”。
在这里插入图片描述

将“循环”拖拽到滑铲结尾,并勾选“循环”。现在人物滑铲后就停住了。
在这里插入图片描述

三、条件判断

打开人物蓝图

1.设置按键

Ue5改版后,需要新建一个操作输入。并命名为IA_Sliding。

在这里插入图片描述
在这里插入图片描述

在默认输入映射情境中选择我们刚才创建IA_Sliding,并将输入键设置为C。
在这里插入图片描述
在这里插入图片描述

2.当人物速度>200时,才可滑铲。

Slide输入键——获取角色移动Get CharacterMovement——获取速度Get Velocity——获取向量长度Vector Length——>200
在这里插入图片描述

接下来判断,当玩家正在掉落时或者滑铲时,不能触发。

1.正在掉落

获取角色移动Get CharacterMovement——正在掉落is falling

2.正在滑铲

网格体Get Mesh——获取动画实例Get Animin Instance——蒙太奇正在播放Montage is playing
使用“与门”And布尔值叠加。
在这里插入图片描述

3.是否滑铲?

创建一个布尔变量“滑铲?”。
在这里插入图片描述

4.播放蒙太奇

创建一个序列Sequence——序列0
设置正在滑铲=真。
设置通过网格体获取动画实例——播放蒙太奇Montage Play,选取上面创建好的滑铲蒙太奇。
在这里插入图片描述

四、缩放胶囊体

虽然现在我们已经可以位移了,但是如果不调整胶囊体,你会发现腿部动作形变得很厉害。
在这里插入图片描述

通过时间轴来缩放胶囊体。

1.创建时间轴

序列1——添加时间轴Add Timeline,命名“缩放胶囊体”。
打开时间轴,添加浮点型轨道,命名为“值”,长度=0.2
在这里插入图片描述

右键创建两个关键帧:
第一个关键帧:时间=0,值=0;
第二个关键帧:时间=0.2,值=1;
在这里插入图片描述

2.设置胶囊体大小

将时间轴的开始执行引脚改为Play from start。
胶囊体组件Get capsual component——设置胶囊体半高Set capsual half height——通过插值Lerp,将胶囊体半高变化设置在35-90之间。(平滑过度)
在这里插入图片描述

胶囊体大小在细节面板中看。
在这里插入图片描述

3.胶囊体随着滑铲缩小

网格体——设置相对位置Set relevant location
在这里插入图片描述

在视口中点击网格体,将动画模式改为使用动画资产,选取滑铲蒙太奇。
在这里插入图片描述

将胶囊体半高改为35,调整网格体的腿与胶囊体最下方对齐。
在这里插入图片描述

还原胶囊体高度和动画。
在这里插入图片描述

将两个高度数值填入相对位置的插值,作为胶囊体移动的高度变化范围。
在这里插入图片描述

4.起身胶囊体恢复

在时间线前加一个事件。
创建自定义事件“反转胶囊体”——通过“角色移动”判断是否处于蹲伏状态——未蹲时,反转时间线timeline(即胶囊体恢复为90)
在这里插入图片描述

五、滑铲时是否在地板上

通过玩家手部胶囊体检测判断人物是否与地板对齐。
通过胶囊体检测玩家滑铲时是否在地面上,如果掉落则停止滑铲、停止播放滑铲动作。

1.滑铲检测事件

添加一个序列,用于检测玩家是否处于滑铲中。
创建一个自定义事件“滑铲时检测地板”——以事件设置定时器set timer by event,time设置为0.01,勾选循环looping(每0.01秒运行一次)——新建序列。
在这里插入图片描述

2.创建宏进行检测

创建宏Macros:检测玩家是否在地板上——滑铲时手在地板上、是否掉落。
在这里插入图片描述

按通道进行胶囊体追踪Capsule trace by channel——获取网格体的世界位置作为检测起始点,检测半径和半高作为输入
在这里插入图片描述

检测半径默认值设为4,检测半高默认值设为18.
在这里插入图片描述

当检测不到时,即滑铲停止——停止播放蒙太奇动画——输出
在这里插入图片描述

Blend out Time作为输入值,默认值为0.2.
在这里插入图片描述

完整如下:
在这里插入图片描述

3.滑铲停止

将定时器返回值提升为变量“滑铲追踪句柄”。
将宏拖入并连接序列0——地板检测结束后——通过滑铲追踪句柄使定时器失效(重置定时器)。
在这里插入图片描述

整理一下:开始滑铲检测地板事件后,每0.01s检测一次玩家是否在滑铲,若未检测到碰撞(地板),则玩家不处于滑铲状态、停止播放滑铲动画蒙太奇、停止检测。

六、玩家与地板对齐

找到与当前地板的旋转值,通过插值平滑地将玩家对齐。

1.创建宏玩家对齐地板

在这里插入图片描述

在宏中设置Actor旋转set Actor rotation。
在这里插入图片描述

设置new rotation旋转参数。
角色运动character movement——获得当前地板信息get current floor——中断Finding Floor result——中断hit result——impact normal地板法线作为“利用zx轴旋转Make Rot From ZX”的Z轴,获取玩家向前向量Get Actor forward vector作为X轴。
使用“R插值到RInterp to”创建平滑旋转:从玩家当前旋转角度,转到地板的平行角度,时间为场景差量Get world delta seconds(同步游戏时间),旋转速度Interp Speed作为输入值设为5.

在这里插入图片描述
在这里插入图片描述

完整如下:
在这里插入图片描述

大致思路:通过玩家向前向量,和垂直地板向量,找到地板的角度,让玩家旋转到与地板平行。
在这里插入图片描述

2.触发对齐

序列1——执行宏
在这里插入图片描述

七、滑铲时是否与物体碰撞

避免滑铲时穿墙,对滑铲时最前面的脚进行球体检测,如果碰到墙,则停止滑行

1.创建宏进行球体检测

创建宏“检测玩家滑动时碰撞表面”。
在这里插入图片描述

输入——按通道进行球体追踪
检测点:获取骨骼的插槽位置,插槽名为脚部的骨骼名ball_I——“+”向量相加函数,分割相加向量的结构体引脚,将Z向量作为输入,保持为0(可自行输入数值进行调试)
在这里插入图片描述
在这里插入图片描述

排除检测数组:将地板检测的那一段复制过来,将地面排除检测。
将检测半径作为输入,默认值=20
在这里插入图片描述

2.条件判断

是否击中:检测的返回值若为“真”,则进行下一个判断。
击中的物体是否与地面垂直:中断检测的命中结果(out hit)——获取法线向量(Impact Normal)——乘以向量(0,0,1)“dot product”——反余弦Acos degree——获取绝对值——若击中角度>80——输出
在这里插入图片描述

将对比角度作为输入,默认值80
在这里插入图片描述
在这里插入图片描述

3.调用宏

序列2连接宏“检测玩家滑铲时碰撞表面”——将上面的使定时器失效复制过来。
在这里插入图片描述

完整如下:
在这里插入图片描述

4.调试

为了便于调试,将球体检测的Draw Debug Type作为输入。
在这里插入图片描述

在宏界面选择类型:针对一帧For One Frame
在这里插入图片描述

滑铲时就可以看到脚部的运动轨迹。
在这里插入图片描述

滑铲的蓝图就建好了,全选后右键添加注释“滑铲”。
在这里插入图片描述

八、是否持续滑铲

在这里完成两个逻辑:

  1. 停止滑铲
  2. 当玩家在斜坡上滑动时,可以持续滑动完整个斜坡。

通过与地板的角度判断是否继续滑铲。角度确定,继续滑行,否则起身。

1.建立蒙太奇通知

通知notify:通过动画调用动画蓝图,在动画蓝图中调用角色蓝图。
滑铲动画快结束时通过蒙太奇通知在动画蓝图中计算速度、调用角色蓝图进行判定是否继续滑铲。

创建“当前滑动速度”向量。
在这里插入图片描述

打开滑铲蒙太奇动画——添加一个通知轨道
在这里插入图片描述

在轨道中新建通知Notify“计算速度”,并将该通知放在最后一帧前面。
然后再新建一个通知“查看是否滑铲”,将该通知放在最后一帧。
在这里插入图片描述
在这里插入图片描述

2.设置滑动速度

打开动画蓝图的事件图表——新建“AnimNotify_计算速度”事件
在这里插入图片描述

将“预览实例”改为“未选中调试对象”(不知道有什么用)。
在这里插入图片描述

获取角色的character movement——get velocity——set 当前滑动速度,滑动速度=当前角色速度
在这里插入图片描述

在人物蓝图中新建一个自定义事件“检查是否继续滑铲”。
在这里插入图片描述

是否继续滑铲=是否滑铲。
在动画蓝图中,新建“AnimNotify_查看是否滑铲”事件——调用刚才创建的事件“检查是否继续滑铲”。
在这里插入图片描述

3.检测地面角度函数

创建函数“寻找当前楼层角度和方向”——返回节点return node,将对齐地板宏中的中断floor结果那一段复制过来。
在这里插入图片描述

中断命中结果的normal与向量(0,0,1)相乘——获取逆角度,作为返回节点的“角度”输出值。
在这里插入图片描述

Normal作为X旋转轴,向前向量作为Y轴,利用XY创建旋转Make rot from XY——分割返回值引脚,X轴的返回值*Y轴返回值——乘积>0,是否向上倾斜Is slope up=真,作为返回节点输出值。
在这里插入图片描述
在这里插入图片描述

4.是否继续滑铲事件

回到角色蓝图,继续写之前的“检查是否继续滑铲事件”。
检查是否继续滑铲事件——正在滑铲为真——调用寻找当前楼层角度和方向函数。
在这里插入图片描述

是否向上倾斜=真,斜坡——设置角色移动速度=当前滑动速度,当前滑动速度在动画蓝图中已经设置过,即滑铲结束时的速度—— 以函数名设置定时器,每0.001s循环“继续滑铲”事件(在后面写),返回值提升为变量“继续滑铲句柄”——调用寻找当前楼层角度和方向函数,当前角度提升为变量。
在这里插入图片描述

复制一个滑铲蒙太奇,删掉通知1、2,将开始时间设为滑铲开始0.71s,结束时间设置为站起来1.53s。这样就是一个倒放的滑铲动画,玩家从滑铲起身。
注意:“选取下一个片段”不要选循环,不然会一直重复播放。
在这里插入图片描述

是否向上倾斜=假,平地——播放滑铲起身动画自定义事件——播放滑铲起身蒙太奇——延迟0.02s——序列
序列0——滑动追踪句柄是否有效Is valid——为真,使句柄无效,停止地板检测。
序列1——翻转胶囊体事件。
在这里插入图片描述

完整如下:
在这里插入图片描述

5.继续滑铲事件

  • 平地,速度不够时停止
  • 斜坡,加速

继续滑铲自定义事件——调用寻找当前楼层角度和方向函数,当前角度=角度——将F插值于Finterp to(平滑过度),当前=当前角度、目标=角度、delta time=获取场景差量Get world Delta seconds、Interp speed=0.4——判定插值后的角度<3?
在这里插入图片描述

角度<3,平地——创建变量“停止滑铲速度”,默认值50——角色速度<停止滑铲速度时,清除继续滑铲句柄,播放起身动画。
在这里插入图片描述

角度>=3,斜坡——序列
序列0——获取Actor旋转,获取向前向量。分割这两个结构引脚,Z轴相连——添加移动输入,世界方向=Z轴方向——设置最大滑铲速度=1500——设置最大滑铲加速度=500
序列1——检测玩家滑铲时碰撞表面宏——为真,撞墙——清除继续滑铲句柄
在这里插入图片描述

完整如下:
在这里插入图片描述

是否持续滑铲整个蓝图如下:
在这里插入图片描述

6.滑铲后重置旋转

滑铲后重置旋转,让玩家面对正前方。
自定义事件“重置旋转体”——获取Actor旋转Get Actor Rotation,提升返回值引脚,将Z轴“创建旋转体Create Rotator”,将旋转体的返回值提升为变量“默认轴旋转Defualt Yaw rotaion”——复制胶囊体的时间轴改名为“重置滑铲旋转”,旋转体连接时间轴的play from start
在这里插入图片描述

时间轴的update——设置Actor旋转,new rotation拉出新建“插值(旋转体)Lerp”——Lerp的alpha连接胶囊体的“值”,A连接获取Actor旋转,B连接变量“默认轴旋转”。
在这里插入图片描述

复制滑铲时设置速度和加速度,最大行走速度=500,最大加速度=1500——胶囊体finished连接
在这里插入图片描述

完整如下:
在这里插入图片描述

在“检查继续滑铲”事件的播放起身动画新增一个序列——调用“重置XY旋转”事件。
在这里插入图片描述

九、调整

在滑铲的“滑动时检测地板”的“地板检测”——判定“继续滑铲”句柄是否有效Is valid?
为真:清除继续滑铲句柄——翻转胶囊体——重置XY旋转
为假:翻转胶囊体——重置XY旋转
玩家在空中,则停止滑铲。
在这里插入图片描述

在检测玩家滑铲时碰撞表面——播放滑铲起身动画(玩家踢中物体则站起来)
在这里插入图片描述
在这里插入图片描述

十、滑铲结束时下蹲

当头顶空间不够时,玩家滑铲结束后要进入下蹲状态。

1.动画通知

在滑铲结束蒙太奇的第1帧添加通知“检查天花板”。
在这里插入图片描述

在人物蓝图中新建自定义事件“天花板追踪”
在这里插入图片描述

在动画蓝图中调用通知“检查天花板”——调用人物蓝图的“天花板追踪”事件。
在这里插入图片描述
在这里插入图片描述

2.下蹲

天花板追踪——按通道进行胶囊体追踪,起点和终点都=当前位置+70(z),半径=34,高度=50,trace channel=可见,actors to ignore=创建数组make array,draw debug type=每帧时长——如果检测到物体——判定character movement的is crouching正在蹲伏
在这里插入图片描述

创建“天花板追踪?”变量。
在这里插入图片描述

天花板追踪=真——解除蹲伏un crouching——天花板追踪=假
在这里插入图片描述

天花板追踪=假——蹲伏is crouching——将“滑铲”逻辑中的获取动画实例复制过来,停止蒙太奇stop montage,in blend out time=0.2——天花板追踪=真
在这里插入图片描述

完整如下:
在这里插入图片描述

3.创建动画混合空间

创建动画>旧有>混合空间1D“下蹲_BS”
在这里插入图片描述

打开混合空间,水平坐标名称改为“速度”、最大速度=150。
将下蹲待机动画拖到第一帧,下蹲行走动画拖到最后一帧。
在这里插入图片描述

在人物蓝图>视口中点击角色移动chracter movement,在细节中修改:
可下蹲=true,最大蹲伏行走速度=150 cm/s
在这里插入图片描述

4.调整动画蓝图

在动画蓝图中,找到已有的蓝图。
Movement Component——正在蹲伏Is Crouching,提升为变量“是否正在蹲伏?”
在这里插入图片描述

在Locomotion状态机中创建按布尔混合姿势Blend pose by bool:
真姿势=下蹲混合动作、速度=ground speed;
假姿势=locomotion;
Active value=是否正在蹲伏?
在这里插入图片描述

滑铲结束后,头顶有东西则下蹲。
在这里插入图片描述

5.退出下蹲状态

在原有蓝图Movement Input的最后面——若天花板追踪=真——调用天花板追踪事件。
在这里插入图片描述

头顶无障碍自动站起。

在这里插入图片描述

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

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

相关文章

用node或者vscode开启一个简单的本地server服务器,加载html网页

使用Live Server 想要加载本地html页面可以快速能让它在你本地浏览器中打开&#xff0c;可以有好多种方式&#xff0c;如果你有使用vscode&#xff0c;可以安装一个插件&#xff1a;Live Server&#xff0c;然后直接在vscode中直接右键就可以开启这个服务&#xff1a; 安装好之…

C++基于多设计模式下的同步异步日志系统day2

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容实现了日志代码设计的实…

select,poll和epoll有什么区别

它们都是NIO中多路复用的三种实现机制&#xff0c;是由linux操作系统提供的。 用户空间和内核空间&#xff1a;操作系统为了保证系统安全&#xff0c;将内核分为两个部分&#xff0c;一个是用户空间&#xff0c;一个是内核空间。用户空间不能直接访问底层的硬件设备&#xff0…

IT廉连看——Uniapp——配置文件pages

IT廉连看——Uniapp——配置文件pages [IT廉连看] 本堂课主要为大家介绍pages.json这个配置文件 一、打开官网查看pages.json可以配置哪些属性。 下面边写边讲解 新建一个home页面理解一下这句话。 以下一些页面的通用配置 通用设置里我们可以对导航栏和状态栏进行一些设…

Android修行手册-集成Python开发环境

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

Apache Flink连载(三十五):Flink基于Kubernetes部署(5)-Kubernetes 集群搭建-1

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 ​编辑

Python爬虫——Urllib库-2

编解码 问题引入 例如&#xff1a; https://www.baidu.com/s?wd章若楠 https://www.baidu.com/s?wd%E7%AB%A0%E8%8B%A5%E6%A5%A0 第二部分的一串乱码就是章若楠 如果这里是写的章若楠就会 产生这样的错误 所以我们就可以使用get请求方式的quote方法了 get请求方式的q…

laravel ApiResponse接口统一响应封装

一&#xff0c;新增接口返回码配置文件 在config中新增配置文件apicode.php <?phpreturn [ apicodes>[/*** Message("OK")* 对成功的 GET、PUT、PATCH 或 DELETE 操作进行响应。也可以被用在不创建新资源的 POST 操作上*/HTTP_OK > 200,/*** Message(&qu…

使用el-form之表单校验自动定位到报错位置问题,,提升用户体验

需求描述 由于需要填写的表单项太多&#xff0c;提交的时候校验不通过&#xff0c; 如果没填写的表单项在最上面&#xff0c;用户看不到不知道发生了啥&#xff0c; 所以需要将页面滚动定位到第一个报错的表单项位置&#xff0c;提升用户体验实现步骤 1. 给form表单添加ref …

数据中心GPU集群高性能组网技术分析

数据中心GPU集群组网技术是指将多个GPU设备连接在一起&#xff0c;形成一个高性能计算的集群系统。通过集群组网技术&#xff0c;可以实现多个GPU设备之间的协同计算&#xff0c;提供更大规模的计算能力&#xff0c;适用于需要大规模并行计算的应用场景。 常用的组网技术&…

1209. 带分数 刷题笔记

思路 暴力匹配 读入目标数 n 看n是否与ab/c相等 因为c里面的除法是整除 我们将 nab/c 转换为 c*na*cb 那么如何获得a,b&#xff0c;c 依题意 a&#xff0c;b&#xff0c;c三个数由1-9九个数字组成 且每个数字只能出现一次 由此 我们可以搜出123456789的全部排列方式…

我做的app上架应用市场一天,快破400下载量,0差评

上集说到&#xff0c;我做了一个叫QB音乐的安卓app&#xff0c;经过一段时间的自我使用与测试终于算发布了。我昨天顺便把它上架了奇妙应用市场&#xff0c;截止目前3月1号过去了一天&#xff0c;下载量快到400&#xff0c;0差评。看来还是能正常使用的。 一、为什么做这个ap…

CleanMyMac X2024免费Mac电脑清理和优化工具

CleanMyMac X是一款专业的 Mac 清理和优化工具&#xff0c;它具备一系列强大的功能&#xff0c;可以帮助用户轻松管理和维护他们的 Mac 电脑。以下是一些关于 CleanMyMac X 的主要功能和特点&#xff1a; 智能清理&#xff1a;CleanMyMac X 能够智能识别并清理 Mac 上的无用文件…

深入剖析k8s-Pod篇

为什么需要Pod&#xff1f; 进程是以进程组的方式组织在一起。受限制容器的“单进程模型”&#xff0c; 成组调用没有被妥善处理&#xff08;资源调用有限&#xff09;&#xff0c;使用资源囤积则导致复杂度上升。 在k8s项目中&#xff0c;Pod的实现需要使用一个中间容器——…

css【详解】—— 圣杯布局 vs 双飞翼布局 (含手写清除浮动 clearfix)

两者功能效果相同&#xff0c;实现方式不同 效果预览 两侧宽度固定&#xff0c;中间宽度自适应&#xff08;三栏布局&#xff09;中间部分优先渲染允许三列中的任意一列成为最高列 圣杯布局 通过左右栏填充容器的左右 padding 实现&#xff0c;更多细节详见注释。 <!DOCTYP…

《无线网络技术》考试版笔记

第一章 无线网络介绍 什么是多径效应&#xff0c;如何去克服&#xff1a; 在发射机和接收机之间没有明显的直线路径时&#xff0c;就会产生多径传播。如果两个信号彼此叠加&#xff0c;那么接收设备就无法正确解调信号&#xff0c;无法还原为它的原始数据形式。 可以稍微调整接…

USLE模型-LS因子的计算

目录 计算坡度计算填洼计算流向计算水流长度计算水平投影![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/75e015b2d6874ce9b6652f2b8730b90f.png)计算可变的坡度指数m计算坡长因子L计算坡度因子S计算LS因子参考视频 计算坡度 准备好30米分辨率的dem 计算填洼 计…

速看!深夜悄悄分享一个电力优化代码集合包!

代码集合包如下&#xff1a; 主从博弈的智能小区定价策略及电动汽车调度策略 碳交易机制下的综合能源优化调度 两阶段鲁棒优化算法的微网多电源容量配置 冷热电多能互补综合能源系统优化调度 考虑预测不确定性的综合能源调度优化 考虑柔性负荷的综合能源系统低碳经济优化调度 考…

C语言学生成绩信息管理系统【结构体+文本】

功能描述&#xff1a; 1、录入成绩 2、显示不及格学生信息 3、统计每档学生数量 4、总成绩统计 代码&#xff1a; #include<stdio.h>#define N 30//结构体&#xff1a;typedef struct STUDENT{char id[10];//学号char name[20];//姓名float score[3];//三门成绩,分别代…

Socket网络编程(四)——点对点传输场景方案

目录 场景如何去获取到TCP的IP和Port&#xff1f;UDP的搜索IP地址、端口号方案UDP搜索取消实现相关的流程&#xff1a;代码实现逻辑服务端实现客户端实现UDP搜索代码执行结果 TCP点对点传输实现代码实现步骤点对点传输测试结果 源码下载 场景 在一个局域网当中&#xff0c;不知…