在许多第三人称 FPS 游戏中,原地转时动画 TurnInPlace 虽然很容易被玩家忽视,但对于制作者而言确是逃不开的一环,毕竟直接使用陀螺仪的旋转太过违和了。文章将介绍两种场景 TurnInPlace 的制作方案 - Controller 朝向 + 根据转身速度播放的转身动画 和 Character Movement 朝向 + 上半身 Modify Bone + 带旋转曲线的转身动画,并给出方案二的常见问题的解决方案
- 方案一:Controller 朝向 + 根据转身速度播放的转身动画
方案代表
- PUBG的瞄准状态
方案实现
- 设置角色转向为控制器朝向,根据角色Rotation的变化方向决定角色播放转身动画的方向,转身动画的播放速率与幅度由Rotation角度的变化率决定
-Rotation角度变化率的计算方式
- 转身状态机
方案优点
- 实现简单,上半身变化稳定且迅速,适合需要快速响应的动画需求
方案缺点
- 转身动画效果一般,容易产生滑步
- 方案二:Character Movement 朝向 + 上半身 Modify Bone + 带旋转曲线的转身动画
方案代表
ALS
PUBG的端枪状态
方案实现设置角色转向为角色移动朝向,玩家在可以转身的 Idle 状态下小幅度旋转控制器会使用 Modify Bone 旋转上半身,当大于阈值后会根据转向和控制器旋转速度播放转身动画,转身动画播放时会读取 Rotation Amount 曲线的值并通过 Add Actor World Rotation 改变角色的朝向并完成转身
Modify Bone 旋转上半身的实现
- 转动角度大于阈值后根据转向和控制器旋转速度播放转身动画
读取 Rotation Amount 曲线的值并通过 Add Actor World Rotation 改变角色的朝向
方案优点
- 全身整体动画流畅,上半身稳定
方案缺点
- 实现较复杂,动画不够及时,有转身延迟,当由于转身延迟导致,旋转角度 > 180°,会有 Modify Bone 突变的问题
-方案二实现中常见的问题
1.转身时枪会摇摆
解决方案
- 删除转身动画骨架上半身的动画数据
- 将下半身转身 Add Actor World Rotation 和上半身扭动 Modify Bone 的逻辑写在同一个 Tick 中,保证这两个逻辑在同一帧内执行
2.转身时后移动的脚步会滑动
解决方案
- 使用 Two Bone IK 将后移动的脚步在转身动画的前半段锁定,在动画后半段再让后移动的脚步移动(例如在播放左转动画时,前半段通过 FootLock_R 的值将右脚锁定)
3.动画有滑步
解决方案
- 使用 IK Rig 的 IK Solver 和 IK Goal 将 Foot 骨骼的 Location 信息锁定