走跑混合
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 的混合,横轴定义了步幅。
Idle→walk→run 的一维混合空间无法处理直接起步跑的情景。而二维空间可以。
混合空间左边起点设计了不同于 Idle 的起步姿势,且走跑各不相同。这是因为项目没有起步动画,而是通过 Idle 和起步姿势的混合来做到起步的。
步态,歩型,步幅和步频¶
Gait¶
由用户的输入进行切换。在 ALS 中,采用 Shift
和 Ctrl
进行切换。
-
逻辑步态
根据玩家输入进行切换。
存储在CharacterInformation.Gait
,每帧更新。 -
动画步态
当前实际播放的动画执行的步态。
动画步态存储在骨骼曲线Weight_Gait
中,由动画驱动更新。执行不同动画时会被动画动态修改。
Walk/Run Blend¶
存储在 Grounded.WalkRunBlend
。每帧由函数 CalclulateWalkRunBlend
计算。
计算非常简单,单纯检查当前步态。