UE高级运动系统(ALSv4)解构(03)解构人物的旋转

1. ALS旋转基础

我们了解,人物的旋转首先包含三个方向
(1)人物的输入方向,即前后左右的输入,我们称为运动方向,在ALS使用人物的Velocity这个二维向量进行实体化
(2)人物的本身朝向,我们称为朝向方向,在ALS中通过SetActorRotationAddtActorWorldRotation函数进行控制
(3)人物的控制器方向,我们称为观察方向,在ALS中通过GetControlRotation进行获取

在人物中控制朝向方向,我们可以看到在`ALS_Base_CharacterBP``中的Even Tick中不断更新人物的旋转,在Tick中的原因也很简单,主要是进行一个平滑的过度。

在这里插入图片描述

在ALS中,旋转方向的设置分为移动旋转和静止旋转。

2. 移动旋转

2.1 自由模式下的移动旋转

移动中的旋转,我们主要考虑目标方向为目标方向,并为了进行旋转的平滑,使用旋转插值的处理,将朝向方向平滑的旋转到运动方向。

在这里插入图片描述

注意:
(1)这里进行了两次插值,主要是为了更平滑的过度,将目标量和上一次的方向进行第一次过渡,再进行旋转插值
(2)因为我们获取运动方向,是人物的Velocity转化为旋转的,因此需要在速度大于0的时候再获取,否则为0

在这里插入图片描述

2.2 观察模式下的移动旋转

对于移动中的瞄准,我们的目标方向变更为观察者方向,因为这个时候鼠标朝向哪里,我们人物就应该朝向哪里。
而移动观察时,需要叠加一个方向,是对于运动方向和观察方向差量的一个身体偏移的方向。

在这里插入图片描述

这里加了一个YawOffset的曲线值,是因为要加上左右移动时候的差异,比如向做左跑动的朝向方向应该偏左一些,这个曲线的设置是存在于八向移动之中。

在这里插入图片描述

此处的LYaw是运动方向与观察方向的插值算出的欧拉角,传入一个定值曲线去得出的向左向右的一个值。

在这里插入图片描述

2.3 移动旋转的总体流程

移动旋转的流程可能比较绕,其基本流程如下:

在这里插入图片描述

3. 静止旋转

3.1 自定义角度的计算

静止的时候,我们角色的旋转是由动画曲线的值来控制旋转的角度的。

在这里插入图片描述

这个动画曲线是在播放动画的地方动态算出来的,播放动画的地方是在动画蓝图的Update中。

在这里插入图片描述

在内部首先进行播放动画资产的判断,根据旋转插值的大小和钝锐角进行动画资产的选择。

在这里插入图片描述

同时动画资产强制根锁定,通过动画修改器,将每一帧的动画差量算出来,进行曲线保存。

在这里插入图片描述

在这里插入图片描述

然后我们通过等式运算,(旋转的角度/总共的角度)*播放的速率=每个差量的角度应该缩放的比例,在将此值以Scale的形式应用回动画曲线RotationAmount,最终以AddtActorWorldRotation的增加量的形式加到Actor的旋转上,最终实现了通过强制根锁定的方式来计算出自定义角度的改变。

在这里插入图片描述

注意:这里使用Add而不使用Set主要是因为不用获取初始与结束的角度,而添加每一帧的增量,很好的增加了封装性。

3.2 静止旋转的瞄准

因为静止旋转的瞄准实时都在动,所以直接使用状态机进行实现,具体参考在Locomotion States内部。

在这里插入图片描述

在这里插入图片描述

3.3 静止旋转的总体流程

静止旋转的主体在于怎么计算每一帧的旋转增量,其流程如下:

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值