ALSv4拆解
whiteviera2025-10-21
角色蓝图:
- 用运动模式来抽象角色的移动“表现”,如速度等。
开始:
- 确保mesh和动画蓝图在角色蓝图之后更新以获取最新的值(可选)
- 获取动画实例
- 从 运动模式表 获取对应的运动模式数据。
- 初始化模式数据:
- 步态(走/跑/冲刺)、旋转模式(朝向视线方向、朝向速度方向、准)、第一 / 第三人称、动画叠层状态(动画的“风格”)和姿态(立/蹲下/趴下)。
- 获取旋转初始数据?
每tick:
- 更新信息
- 获取信息(代表角色正在怎么动(速度) / 想要怎么动(加速 度) / ...)
- 加速度
- 是否在运动、(如果有的话)上一帧的速度朝向
- 是否有运动输入(根据加速度计算)、(如果有的话)运动输入方向
- 偏航角速度(?)
- 缓存数据
- 上一帧的速度
- 上一帧的偏航角
- debug draw
- 获取信息(代表角色正在怎么动(速度) / 想要怎么动(加速 度) / ...)
- 根据运动状态(在地上 / 在空中 / 布娃娃)判断:
- 在地上:
- 更新运动
- 获取当前可用的步态(主要用于gameplay限制,如“在室内只能步 行”)
- Desired Gait ???
- 下蹲 / 行走:只能走 / 慢跑
- 其他:根据能否冲刺(是否有输入、视线与输入的夹角、是否瞄 准)判断是否冲刺
- 获取实际步态???【根据移动状态数据(?)和实际数据计算当前 的实际步态】
- 【可用步态与实际步态不同:当角色冲刺进入某个只能步行的状态 时,因为还存在速度所以实际步态还是奔跑???】
- 如果实际步态与上一帧的步态不同则发出步态更新事件,更新步态 值。
- 使用【可用步态】更新运动设置。
- 根据运动模式和姿态获取目标运动设置。
- 根据上文获取的设置更新速度、加速度、摩擦力等。
- 将速度映射到0~3范围,分别对应停止、行走、慢跑和冲刺(?)
- 获取当前可用的步态(主要用于gameplay限制,如“在室内只能步 行”)
- 更新地面旋转
- 根据当前正在进行的特殊动作(翻越、翻滚、...)判断。
- 如果正在翻滚:平滑角色旋转(输入旋转-实际旋转的平滑)
- 如果处于正常状态且能够更新旋转(在动、有输入且未进行根运动(?)),则根据旋转模式进行判断:
- 朝向速度方向:平滑角色旋转;使用曲线和摄像机水平移动的速率控制旋转率
- 朝向视线方向:平滑角色旋转。YawOffset?
- 瞄准:平滑角色旋转。为什么是固定速率?
- 没动:在第一人称 / 瞄准情况下限制视线和角色的朝向角度;从原地转身动画提取旋转并应用至角色身上。
- 根据当前正在进行的特殊动作(翻越、翻滚、...)判断。
- 更新运动
- 在空中:
- 更新空中旋转(角色->目标旋转)
- (如果有输入的话)检查是否能够翻越
- 在地上: