Skip to content

走跑混合

Ciallo ~(∠・ω< )⌒★!

本文讨论基于学习用的 ALSCPP 项目 GitHub - aizawaayame/OnaGameSample: Rewrite the ALS project using C++.

Concept

在一切开始前,先明确几个概念的约定,方便后续的讨论和实现。

步态 Gait
代表了角色处于 Walk,Run,Sprint 三个状态。这三个状态由用户输入决定,而不是取决于角色当前的速度。

步型 Walk/Run Blend
代表 Walk→Run 的混合度。不知道怎么命名了,就叫歩型吧。

步幅 Stride
角色迈步的幅度。作为混合空间的其中一个轴向。

步频 Play Rate
角色迈步的频率。作为动画播放的频率。

定义2D混合空间

纵轴定义 Walk/Run 的混合,横轴定义了步幅

纵轴定义 Walk/Run 的混合,横轴定义了步幅。

Idle→walk→run 的一维混合空间无法处理直接起步跑的情景。而二维空间可以。

image.png

混合空间左边起点设计了不同于 Idle 的起步姿势,且走跑各不相同。这是因为项目没有起步动画,而是通过 Idle 和起步姿势的混合来做到起步的。

步态,歩型,步幅和步频

Gait

由用户的输入进行切换。在 ALS 中,采用 ShiftCtrl 进行切换。

  • 逻辑步态


    根据玩家输入进行切换。
    存储在CharacterInformation.Gait,每帧更新。

  • 动画步态


    当前实际播放的动画执行的步态。
    动画步态存储在骨骼曲线 Weight_Gait 中,由动画驱动更新。执行不同动画时会被动画动态修改。

Walk/Run Blend

计算步态
return CharacterInformation.Gait.IsWalking() ? 0.0f : 1.0;

存储在 Grounded.WalkRunBlend。每帧由函数 CalclulateWalkRunBlend 计算。

计算非常简单,单纯检查当前步态。

Stride

Play Rate

Reference

UE4/UE5 骨骼动画 高级运动系统 走跑混合初步