JustMakeGame 9. 倾斜姿势&加速动作&回转运动&移动停止

倾斜姿势

RelativeAccelerationAmount 相对加速量前面用过。
我们需要的是前后,左右。两个方向上的速度值,用于混合空间的参数

void UCwlBaseAnimIns::CalculateLeanAmount()
{
    FCwlLeanAmount TargetLeanAmount;
    float DeltaSeconds = GetWorld()->GetDeltaSeconds();
    TargetLeanAmount.ForwardBackward = RelativeAccelerationAmount.X;
    TargetLeanAmount.LeftRight = RelativeAccelerationAmount.Y;
    LeanAmount = InterLeanAmount(LeanAmount, TargetLeanAmount, GroundedLeanInterpSpeed, DeltaSeconds);
}

FCwlLeanAmount UCwlBaseAnimIns::InterLeanAmount(FCwlLeanAmount Current, FCwlLeanAmount Target, float InterSpeed, float DeltaX)
{
    FCwlLeanAmount NewlLeanAmount;
    NewlLeanAmount.ForwardBackward = UKismetMathLibrary::FInterpTo(Current.ForwardBackward, Target.ForwardBackward, DeltaX, InterSpeed);
    NewlLeanAmount.LeftRight = UKismetMathLibrary::FInterpTo(Current.LeftRight, Target.LeftRight, DeltaX, InterSpeed);
    return NewlLeanAmount;
}

混合空间是一个角色前后左右的倾斜度的资源

image.png

image.png

(N)CycleBlending 是八项移动。出来后就混合一个倾斜姿势。

加速动作

到这里我们完成了这个状态机 Locomotion Cycle,主要描述地面八项运动,走,跑,冲刺,倾斜姿势等细节。
save pose 【locomotion cycle】

image.png

第二部分 Locomotion Detail 描述走跑过度和回转运动。

image.png

这里面所有状态都是use locomotion cycle,然后叠加了一些其他的动画我认为这是一个动画蓝图的使用技巧。
walking和running状态都是

image.png

然后其他状态则是这个pose叠加了一些其他的姿势。

image.png

Walking和Running的过度条件是步态,用曲线 Weight_Gait 说明,逻辑状态是走还不行,动画的过度也需要到走的状态才能切回来。

image.png

发现右边这一块需要讲完下一节,移动静止,不然现在讲不清楚。emmmmm

回转运动

突然转向的一个过度细节。这个功能Lyra也有。效果是一样的。不过我觉得ALSv4这里代码就比较简单了。这个八向运动中间一圈,标记一个
bPivot的 True,然后0.5s tick改为false。

image.png

image.png

  • bPivot True的时候进入 Pivot状态机。
  • 又由于可能0.1s内反复触发回转运动,已经在Pivot状态内,就不需要切换了,所以需要 First/Second Pivot
  • 这里过度混合时间的0.1和tick延迟0.1s设置false需要保持一致。
  • pivot=》running过度条件是状态播放完。

移动停止

image.png

上面完成的走跑的细节处理,并save pose 【locomotion detail】
然后开始写第三个状态机,主要处理移动与静止

回到加速动作

image.png

image.png

  • 3的过度条件比 Walking直接过度Running 多了一个动画状态机判断。表示在地面上。
  • Run Start 还是 Walk Run的条件用的是 Locomotion Detail 是否等于1
  • ALT切换走状态,shift起步是一边。正常静止到跑是一边。原项目有歧义。动画效果不明显,就这样把。

Run Start/ Walk Run 状态机是一样的,参数不一样。效果是 Walking->Run Start/Walk Start-> Running。 在 Walking-> Running之间加一个状态播一个过度动作

image.png

上一篇
下一篇