443 字
2 分钟
走跑混合
文章目录
Ciallo ~(∠・ω< )⌒★!
本文讨论基于学习用的 ALSCPP 项目 GitHub - aizawaayame/OnaGameSample: Rewrite the ALS project using C++.
Concept
在一切开始前,先明确几个概念的约定,方便后续的讨论和实现。
步态 Gait:
1. 代表了角色处于 Walk,Run,Sprint 三个状态。这三个状态由用户输入决定,而不是取决于角色当前的速度。
步型 Walk/Run Blend:
1. 代表 Walk→Run 的混合度。不知道怎么命名了,就叫歩型吧。
步幅 Stride:
1. 角色迈步的幅度。作为混合空间的其中一个轴向。
步频 Play Rate:
1. 角色迈步的频率。作为动画播放的频率。
定义2D混合空间

/// caption
纵轴定义 Walk/Run 的混合,横轴定义了步幅。
Idle→walk→run 的一维混合空间无法处理直接起步跑的情景。而二维空间可以。
///

/// caption
混合空间左边起点设计了不同于 Idle 的起步姿势,且走跑各不相同。这是因为项目没有起步动画,而是通过 Idle 和起步姿势的混合来做到起步的。
///
步态,歩型,步幅和步频
Gait
由用户的输入进行切换。在 ALS 中,采用 Shift 和 Ctrl 进行切换。
-
逻辑步态
- 根据玩家输入进行切换。
- 存储在
CharacterInformation.Gait,每帧更新。
-
动画步态
- 当前实际播放的动画执行的步态。
- 动画步态存储在骨骼曲线
Weight_Gait中,由动画驱动更新。执行不同动画时会被动画动态修改。
Walk/Run Blend
return CharacterInformation.Gait.IsWalking() ? 0.0f : 1.0;存储在 Grounded.WalkRunBlend。每帧由函数 CalclulateWalkRunBlend 计算。
计算非常简单,单纯检查当前步态。