UE5动画

状态机和状态别名

随便新创建一个第三人称项目

打开这个位置,可以看到有两个动画,ABP中,A表示Anim,BP表示蓝图。可以鼠标一上去,发现Quinn是继承自Manny的,因此我们直接修改Manny即可。

进入内部是一个动画蓝图,如果找不到就在左下册,我的蓝图中点击一下动画图标中的AnimGraph即可。

对于上述这个图,我们先看上面,是一个状态机指向一个cache,内部是一个idle和wale/run的状态切换,中间的表示转换条件

接着看下面,有一个Main States的状态机

内部发现又看到了一个Locomotion,这是什么呢?进去一看发现是使用之前的缓存,就是说进入这个状态之后,就会循环调用之前存在缓存的部分

效果上和下面这一种是等价的

对于上面的Jump,Land,Fall Loop是状态

To Falling和To Land是状态别名

点击选中之后可以看到右边的状态别名,可以看到Jump和Fall Loop是打钩的,意思是这两个状态可以转化为Land状态,其效果等价于下面这一种。对于比较少的状态自然无所谓,当状态很多的时候,状态别名就很有优势了。

接着双击空白处,重新回退到外面。看第二个,可以看到一个动画蒙太奇

使用的是DefaultSlot,代表的是全身动画。

接着后面是是绑定的是一个绑定控制(里面有例如ik_foot这种东西),最后成功输出一个姿势,也就是实际游戏看到的样子。

动画重定向

可以把其他角色的动画重定向到当前角色身上。

先导入一下Fab资源包,去搜索一下这个FreeAnimationLibrary

这个界面可以点击设置,视图展示为列,然后不显示文件夹得到。

全选之后右击,重定向动画资产

可以看到,这里有一个源骨骼网络体和目标骨骼网络体

UE5.5时候已经可以生成IK重定向器了,因此我们只需要选好我们的转换目标

然后点击导出重定向资产,导出即可(记得要全部选中),选择导出动画,这样在目标位置处就可以生成我们新的动画了

双击点开看一下,如果没有什么异常一般就没有问题了

替换角色动画

在如下文件夹位置,点击第三人称角色,然后在组件,找到网格体,接着看向右边的网格体资产。这里默认的是Quinn资产,我们可以选择缓存manny

切换编译后,再进入游戏可以看到,初始默认角色已经变成了男性

上面的动画类,也是用的Quinn,也改成manny

接着回到动画蓝图,还是到这里,双击Idle

左边的节点可以看到就是一个动画序列

双击打开后,就是角色的动画。这也就是为什么我们开始的时候角色默认站立不动的待机动画

这里要测试不同的idle,可是拿枪那个Demo已经无了,因此打算做个拿剑的类似Demo。

导入这个资源包RamsterZ_FreeAnims_Volume1,记得仍然需要转化哪些步骤再来一遍。

拖入这个,可以先预览下,发现游戏默认已经变化了。

同时还发现,我们此时的新idle和walk/run还是可以流畅的切换。

修改绑定控制

这里貌似是高版本修复了这方面的问题,并不会出现脚部悬空的现象,如果按照上述步骤IK都是正常的

什么是ik呢?就是反向动力学。是根据骨骼的终节点来推算其他父节点的位置的一种方法。比如通过手的位置推算手腕、胳膊肘的骨骼的位置。

原因是ik_foot没有没有和预期一样,打开动画骨骼后,查看ik_foot,发现他的并不是预期情况

而正常应该是

正常来说,foot要和ik_foot位置一致才可以,因此,如果不一致,我们可以主动调整ik_foot使其和foot位置一致

因此,回到我们刚才,点击footik那个蓝图进去,可以再添加一个逻辑主动地设置位置匹配,这样解决了问题。脚步就会接地了

混合空间1D

回到我们的ABP_Manny,还是找到开始的Walk/Run

双击进去,中间那个就是混合空间

在双击混合空间进入,就是我们两个动作

相当于是添加了一个Walk和Run的动作,中间都是平滑出来的状态。按ctrl可以看不同速度的状态。这个speed是在事件蓝图部分,每一帧调用获得。得到了总体的速度分量,但是最终只去水平面XY的分量。

同时可以看到下面,为了避免微小的扰动,只有当速度大于一定阈值的时候,才真正会移动

那我们又是如何使用这个变量的呢?UE支持变量查找用途,查找后发现

可以看到他们都是在转换的规则里面,也就是说想要切换到移动状态就必须满足这个条件。这样让变量发挥了作用

最下面,还有一个从Movement Compoment中获取是否在falling的功能

查阅了一下相关定义,在UE中,把只受到重力影响的运动状态称之为Falling,因此比如说跳跃就属于这个的子状态。

同时,查询后发现下落还是有最大速度的,应该是有地方配置。

试了试Movecompoment,还发现有一个isFlying的东西,查询了一下。这个需要我们自己去配置的,在这个状态下角色不受重力影响,自由移动。看来很适合后续的扩展。

现在我还剩下最后一个疑问,IK_foot怎么检测到地面位置的呢?怎么调整倒是大概明白了,然后就去查看源码去了,差点没给我整吐,可读性好差

看了半天也没想明白,移动到函数旁边也没有注释,也是完全不理解。不过感谢万能的知乎,太好用了。

我们传入的是一个脚的骨骼,那么这里假设就是右脚。

R是骨架root的位置,F是骨架foot的位置,取R点的z值以及F点的x,y获得P点,P点就是F在R所在水平面的投影点。

接着对于这个P点,设置一个上下AB点进行射线检测(AB也就是腿最高变化),如果碰撞,对应到I点,I就是我们的碰撞点。然后,我们对这个碰撞面做一个垂线,然后得到我们点T(IT是常亮)。对于P点也增加向上的常量FootHeight获得O点,最终得到OT为偏移向量,施加上去后,就可以通过IK调整好我们的脚形

此时你可能会发现,那我OT向量实际上只和脚部的XY相关,那Z呢?其实不用去管,因为我们获取的是一个偏移量,实际上这里只是修正脚部形状的,不是获取脚部高度的。实际情况下二者叠加上去就好了。

回归正题,我们继续回到混合空间1D

找个位置,创建混合空间1D。注意在旧有里面。上面的混合空间可以认为是一个2D的。

还是选择我们的manny骨骼,然后命名一下

然后打开,拖两个动作进来。我这里没有视频动作,就自己搞了Crouch的idle和fwd,反正是idle和fwd切换就好

此时按crtl可以看到,不同的状态

我们回到角色的状态机修改

把它拖进来,不过这个None有些难绷,因此我们进去找水平坐标,把名称修改为Speed,最大轴值修改为500,然后预览处选中最后一个动画修改为500

有时候脚部感觉很不对,感觉不是走出来而是滑动的,因此我们修改一下

水平轴选择locomotion,然后绑定左右脚,分析取样一下可以解决

不过这个还是有点太难绷了,要是想要预设速度不滑膜,速度要达到2500…..,普通走路怎么可能呢

吐了找模型找不到合适的,最后用一个那个Sword_Animation得了

有些动画他自己就开始跑了,可以去动画里面去调整,强制根锁定之后,角色角色就不会乱跑了。好评

实现角色蹲走

步骤:

  • 添加输入操作
    • 一般在Input下面的Action目录下,添加一个新的输入操作,例如IA_Crouch
  • 配置输入情景
    在输入映射情景里面配置一下
  • 添加映射,选择我们刚才的,然后控制按键,触发器(已按下),保存并退出
  • 回到角色蓝图,开始配置
    • 因为我们之前配置好了,所以直接在角色蓝图里面调用刚才的事件。对应很多种触发方式,那我们选择的结合治理应该就是triggered,其他的可以鼠标移上去看看具体什么效果。
    • 然后是filpflop,这个是每次触发都切换一下,原理应该是记录了static变量之类的。
    • 下面的crouch和uncrouch是角色自带的,就像walk,run之类的提前都给你整好了。区别是Crouch没有实现动画,需要再实现一下
    • 按理说胶囊体应该会有变化,可是我这里没有。倒也不是什么大问题,自己再写就是了,然后可以打印一下输入,在游戏内看到角色的动作。
      • 后续找到问题了,看日志发现没有启用这个功能。也就是需要去角色里面配置,可以crouch,同时还发现还有可飞行,这个后续再说
      • 我们还需要让比如说其他地方可以知道我这边是否是蹲下状态,因此最好再加一个变量,便于其他地方查询。
      • 这里的iscrouching只是演示一下,其实角色自带的isCrouched,我们直接调用那个就行。
  • 添加动画
    • 回到动画蓝图,新添加一个变量,记录一下是否是蹲下状态。连在sequence后边,这样每一帧也都会被检索和调用了
    • 此时,新建一个状态和状态别名,连线起来
      配置一下状态别名,可以从我们的Locomotion和Land转换过来,这两个地方记得打钩
    • 此时两个转换状态也呼之欲出了,当iscrouched为True才会转化的crouching,为false再转换到locomotion

然后我们点进去state开始配置,流程如下

速度最好不是>=0,设置一个比如说>=5的阈值比较好,然后记得设置动画和启动循环。

这里如果想要一个比较平滑的过度,可以用个什么混合空间啥的。当然目前感觉也够好了就不用

前面我们发现,角色的mesh和角色的模型是分开的。这样解耦有利于性能的优化。但是后续如果需要更精细的角色模型控制,那能否直接和任务模型绑定呢?

绑定武器

打开角色模型,然后在里面找到hand_r,添加插槽,为后续添加武器做准备

新建一个Weapon类蓝图,为Actor的子类,里面

在根组件下添加骨骼网格体组件,然后加入进来、右边选择合适的网格体

这里出现两个概念,骨骼网格体和静态网格体,区别具体来说

特性骨骼网格体(会动的模型)静态网格体(不会动的模型)
会不会动?​✅ 会动(像人、动物、怪物)❌ 完全不动(像石头、房子、桌子)
怎么动?​靠内部的”骨头”(骨骼)驱动一动不动,焊死在地图上(或者全局一起动)
适合做什么?​角色、生物、可变形物体(比如旗帜)场景道具、建筑、地形装饰
性能消耗较高(要计算骨骼动画)很低(直接渲染就行)
举个栗子🌰会跑步的士兵、会飞的龙马路上的垃圾桶、游戏里的墙壁

对于骨骼动画的原理,每一帧动画其实都是骨骼的位置/旋转数据,模型顶点会跟随骨骼移动(即蒙皮)
对于静态网格体,只能够全局整体的移动,不能够对内部精细移动调整。

回到角色中,要添加使其成为角色网格体的子层级。找到这个蓝图然后拖过来

点击BP_Weapon,在细节处找到插槽,选择我们前面创建的插槽

但是可以看到角度位置都有问题,这时候我们回到插槽预览,点击选择预览资产,然后调整。同时可以选择特定动画,在我们期望的动作上。调整完整后保存。

回到蓝图重新编译一下,没有问题了

那我们为什么要创建一个武器蓝图呢?为什么不直接把武器网格体拖过来?这是因为后续武器可能也有很多逻辑,如果直接拖后续对于武器的处理逻辑就要写在角色里面了不太好。解耦不太好

后续

导出动画中某一段动画

选中动画,打开后在sequencer中编辑。确定好首位之后烘焙动画序列

同时甚至可以改变骨骼的位置然后再重新插帧,这里便于我们做一些比较精细的调整。

使用动画蒙太奇

可以支持一个混合,即我需要一个动画的上半身和另一个的下半身。二者混合得到最终的动画。

导入特定动作动画

内容参考

UE5角色动画教程-1.课程简介_哔哩哔哩_bilibili

全程无废话,ue5.4超实用人物动画与骨骼绑定纯中文教程,快速一键动画导出,更高效的骨骼绑定与动画修改,在ue5.4中实现骨骼绑定与更改权重_哔哩哔哩_bilibili

UE5,4.1人物飞行_ue5 飞行-CSDN博客

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇