IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【UE4高级运动系统学习(一)】浅谈高级运动系统的动画蓝图 -> 正文阅读

[游戏开发]【UE4高级运动系统学习(一)】浅谈高级运动系统的动画蓝图

浅谈高级运动系统的动画蓝图

推荐学习视频:深入浅出 高级运动系统

一、动画蓝图状态机

打开高级运动系统的状态机,映入眼帘的就是这张蓝图结构,看起来十分复杂,但是整体的框架结构还是比较清晰的,根据作者的注释,我们可以逐步拆分这些内容。

在这里插入图片描述
以下是来自原作者红框中的注释

理想情况下,每个动画图表的布局都应该根据每个项目的具体需求来确定。
因此,很可能需要修改此动画图表和链接层图的部分(或全部),以满足项目的特定需要。
值得庆幸的是,由于UE4动画系统的高度灵活性,完全可以保留/重新排列这些图形的部分(或该系统的概念),同时使用完全不同的设置。

1. 整体构造

通过图中可以看到,整体动画的混合逻辑如下

  • Layer Blending——分层混合,主要处理移动、跳跃等状态动画的行为并进行混合,最终输出一个通过玩家操作后得到的动画结果
  • Apply Offsets——应用瞄准偏移或手动脊柱旋转等,主要处理对应游戏模式下需要对动画结果进行的偏移操作
  • IK——添加手部/脚部IK行为,让最终输出的结果更合理
  • Ragdoll Override ——混合布娃娃效果

这里可以看到主要的动画切换逻辑都是在分层混合中实现,后面的3种混合都是为了让结果更加合理精确,那我们详细看一下分层混合的逻辑

2. 基础动画混合实现——Layer Blend

在这里插入图片描述

这里可以看到作者最外层分成了3层

  • BaseLayer:基础层,输出最基本的动作姿势跟角色的行为相关(移动、奔跑或跳跃等)
  • OverlayLayer:叠加层,输出一个姿势状态与基础层进行混合,例如拿着武器移动等
  • BasePoses:基础姿势,输出最原本的站立/默认姿势

并将这三层的结果进行混合计算,混合模式如下
在这里插入图片描述

混合的计算这里看起来比较复杂,我们可以先跳过,大概只要知道是通过输出的这三个结果进行了一个混合,得到最后的动作结果就行

2.1 BaseLayer——基础动画层

打开BaseLayer,能看到以下蓝图,这里作者分了好几种状态进行输出
这些状态机都是同步运行的,只要满足对应的状态需求就会进行切换,然后输出姿势进行缓存,确保最终输出的姿势是正确的
在这里插入图片描述
注:这里先不考虑蹲伏模式,这样看起来状态机没那么复杂,同理地面的状态切换也没用了,因为他主要是处理蹲伏和站立的切换

因此我们首先看站立状态的输出逻辑
站立状态分成了3个状态机和对应的输出,分别是
Locomotion Cycles、Locomotion Detial、Locomotion Satets
在这里插入图片描述

① Locomotion Satets

最基本的动画状态,检测是否有移动行为进行切换
在这里插入图片描述

注:这里的RotateLeft/right状态是属于自动朝向旋转的逻辑,由于不使用这里不多做介绍

  • Not Moving状态:输出了默认的站立姿势/动画
  • Stop状态:处理从运动到停止的脚步缓慢偏移(效果不太好,建议无视)
  • Moving状态:输出Locomotion Detial的输出缓存姿势
  • NotMoving ——> Moving:判断是否需要移动(根据当前速度/是否有输入操作等逻辑判断)
  • Moving——>Stop:通过动画权重判断是否还在移动中,但是已经没有移动行为输入
  • Stop——>Moving:动画权重已经处于停止状态

② Locomotion Detial

进入移动行为后就会进入到这个状态机中
在这里插入图片描述

注:在Running上面的2个Pivot状态可以忽略,正常情况不会用到

  • Walk:步行状态,根据步态和速度进行判断,输出Locomotion Cycles状态机的姿势
  • ->Run:进入奔跑,当时出冲刺或者奔跑行为会先进入这个状态进行缓冲,并不会有任何输出
  • Walk->Run:如果之前处于步行,则从步行切换到奔跑,并播放小幅度的过渡姿势(动画混合)
  • Run Start:直接从静止切换到奔跑,播放一个大幅度的过渡姿势(动画混合)
  • Running:奔跑状态,同Walk,输出Locomotion Cycles状态机的姿势

可以看到不管是步行状态还是奔跑状态,最终的输出都是根据Locomotion Cycles的结果输出的,那主要的移动动画逻辑应该都在Locomotion Cycles
Ps:冲刺和奔跑都是属于Running状态

③ Locomotion Cycles

在这里插入图片描述
这里看起来比较复杂,其实可以简单理解为:
由4个计算得来的变量控制最终的每种动画混合的姿势结果,并把所有姿势进行缓存,再用对应的状态机控制需要播放哪个姿势

  • 首先我们用Stride Blend、Walk Run Blend这2个变量(通过玩家操作的行为事件计算得到的结果),作为动画混合的参数(X轴和Y轴),得出了每个方向的动画混合姿势(前、后、左前、左后,右前、右后)ps:正常的移动状态下,只会使用前方向的动画姿势
    在这里插入图片描述

  • Play Rate用于控制动画的播放速率,实现步态切换的平缓

  • Standing Play Rate作为冲刺混合的参数,得到混合后的冲刺姿势**(这个姿势之后只会用于前方向混合,因为只有前方向有冲刺)**

  • CycleBlending:缓存了6个姿势结果,并把冲刺姿势与前方向姿势混合,得到最终的前方向姿势
    在这里插入图片描述

  • Diretional States:CycleBlending输出姿势结果的状态机
    在这里插入图片描述
    如果不处于瞄准移动模式,该状态机只会处于Move F的状态

  • Move F状态内容如下
    在这里插入图片描述

对于正常的移动行为来说,其实只是输出了 前方向运动的最终动画结果,这个姿势被设置为Locomotion Cycles的结果

④ Main Movement States——BaseLayer层的输出姿势

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

  • Grounded 地面状态,通过上面的嵌套结果我们知道,我们只需要拿Locomotion States的结果,就能获取地面状态下的角色结果,因此这里直接输出即可
    在这里插入图片描述
  • Land 落地状态:待更新
  • Jump 跳跃状态:待更新
  • Fall 坠落状态:待更新

2.2 OverLayer——叠加动画层

保持基础动画的同时,叠加其余姿势,例如:一边拉弓一边走
在这里插入图片描述
以上是高级运动系统提供了多种状态,我们以Torch为例
在这里插入图片描述

通过用设定好的曲线进行姿势混合得到最终结果,根据不同的状态(站立/蹲伏)或者行为(朝向变化)以及一些参数调整得到最终的姿势并输出
在这里插入图片描述

2.3 BasePoses——基础姿势

单纯的输入角色基础的站立动画姿势,用于之后计算

3.Apply Offsets——应用瞄准偏移等功能

处理头部转向等相关逻辑
在这里插入图片描述

4. IK相关

5. 布娃娃相关

二、移动转身优化

1. 原本移动操作的转身逻辑——通过插值和按下的时间计算目标旋转点

在这里插入图片描述
给人的感觉操作比较迟钝,如果原地快速按方向键最后的结果会跟自己想要的不同

2. 修改目标:每次操作结束都会转到对应的位置(与原神操作手感一致)

同比原神的转身逻辑,每次操作后都会转到对应的位置才停下,如果打断了会立刻改变,转身效果会稍微有点硬,但是比较合理,修改了以下3点

  • 去掉了第二次的线性插值计算,让旋转不要过于缓慢
  • 修改了判断是否按下移动键才旋转的逻辑,每次操作后都会一直Update旋转到目标位置才停下
  • 去除了FootLock的功能,该函数会每次会在运动状态前锁定脚部的动画位置,在运动结束后再通过插值缓慢修改脚步的动画

三、冲刺相关优化

  1. 取消冲刺时的移动惯性和摩擦力设置
    在这里插入图片描述

四、AI使用

待更新

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:56:00  更:2022-03-04 15:56:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:23:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码