五一快乐,在苏州溜了两天,人人人人人太多了,真不如在家躺着。。。
图形学渲染管线部分暂告一段落🎉比起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