ALSV4 - (1)角色蓝图/动画蓝图初步

五一快乐,在苏州溜了两天,人人人人人太多了,真不如在家躺着。。。

图形学渲染管线部分暂告一段落🎉比起2年前初看,理解更为深刻,也明白了更多的为什么,虽然疑问也还有不少,这部分内容就等后面渲染实践时再回头深化吧。

进阶第一关:运动系统

运动系统学习曲线太陡峭劝退,alsv4 Lyra谈论虽多,至今没看到一篇能完完全全讲清楚明白的…

没办法,只得从头到尾拆解als看看了

状态枚举

Gait 步态

  • Running 跑
  • Walking 走
  • Sprinting 冲刺

RotationMode 旋转模式

  • VelocityDirection 速度方向: 代表角色移动时,身体(root)会朝向速度方向
  • LookingDirection 看的方向: 代表角色移动时,身体(root)始终背对摄像机(朝向看的方向)
  • Aiming 瞄准方向: 和Looking类似,只是会有放大效果和速度快慢区别

ViewMode 视角

  • ThirdPerson 第三人称
  • FirstPerson 第一人称

OverlayState 应用叠加状态

不同叠加姿势

  • Default

姿势

  • Standing 站立
  • Crouching 蹲下

ALS_Base_BP(角色蓝图)

BeginPlay

1. Add Tick PrerequisiteActor

确保在更新角色蓝图(CharacterBP)后,再更新网格体(mesh)和动画蓝图(animbp),以确保获取最新的值。

2. 缓存动画实例引用

3. SetMovementModel

从MovementModelTable表里加载normal移动数据到MovementData结构体

4. 初始化各种状态

ML Set Previous and New Value 宏

这个宏的作用就是设置三个值:前一个值,当前的值,新的值。这里是将Target->Previous NewValue->Target

再来看状态初始化就能看懂了。这里几个状态都是类似

步态
  • Gait 当前步态
  • Previous Actual Gait 前一个步态
旋转

设置旋转模式后还有根据旋转模式和视角模式 如果是速度模式但是viewMode是FirstPerosn第一人称设置为第三人称

  • Rotation Mode 旋转模式
  • Previous Rotation Mode 前一个旋转模式
视角设置

除了宏设置,

然后是根据Desired Stance 初始化姿势

OnMovementModeChanged 移动模式变更时

执行了对应On Character Movement Mode Changed 方法。

根据新的movement mode状态, NavmeshWalking Walking 使用BPI设置为 Grounded(地面状态) , Falling 设置为 In Air

OnStartCrouch 开始蹲下时

调用姿势变换 -> Crouching 并存储上一个姿势,当前姿势,新的姿势

OnEndCrouch 结束蹲下时

调用姿势变换 -> Standing 并存储上一个姿势,当前姿势,新的姿势

OnLanded 落地时

判断是否打断落地BreakFall, 如果是则进入BreakFall Event。 这里的打断落地应该仅指的是是否有翻滚输入。如有则落地播放翻滚动画。如果没有则设置制动摩擦力因子。

有移动输入 设置摩擦力因子为0.5 无设置为3 延迟0.5s后 设置摩擦力因子为0

BPI 各种状态变化时

  • BPI_SetMovementState 蓝图接口-设置移动状态时
  • BPI_SetMovementAction 蓝图接口-设置移动行为时
  • BPI_SetRotationMode 蓝图接口-设置旋转模式时
  • BPI_SetGait 蓝图接口-设置步态时
  • BPI_SetViewMode 蓝图接口-设置视角模式时
  • BPI_SetOverlayState 蓝图接口-设置叠加状态时

如果状态有变化,调用对应的初始化方法。

小结

角色蓝图内主要存储状态数据,包含上次的,当前的以及最新的。涉及的类别有:

  • Movement State (None, Grounded, In Air, Mantling, Ragdoll)
  • Movement Action(None, LowMantle, HighMantle, Rolling, GettingUp)
  • Rotation Mode (VelocityDirection, LookingDirection, Aiming)
  • Gait (Walking, Running, Sprinting)
  • View Mode (ThirdPerson, FirstPerson)
  • Stance(Standing, Crouching)

ALS_ABP(动画蓝图)

接下来到了重头戏。内容虽多,暂且仅看核心部分————BaseLayer

在研究状态机之前,还得先看下 Initialize 和 Update

Initialize

很传统,只是存储Character的引用。

Update

接下来看看每帧执行了啥。

Update Character Info

存储角色一些重要的数据

  • Velocity
  • Acceleration
  • Movement Input
  • Is Moving
  • Has Movement Input
  • Speed
  • Movement Input Amount
  • Aiming Rotation
  • Aim Yaw Rate

存储角色当前状态

  • Pawn Movement Mode
  • Movement State
  • Prev Movement State
  • Movement Action
  • Rotation Mode
  • Actual Gait
  • Actual Stance
  • View Mode
  • Overlay State