ALSv4拆解

whiteviera2025-10-21

角色蓝图:

  • 用运动模式来抽象角色的移动“表现”,如速度等。

开始:

  • 确保mesh和动画蓝图在角色蓝图之后更新以获取最新的值(可选)
  • 获取动画实例
  • 运动模式表 获取对应的运动模式数据。
  • 初始化模式数据:
    • 步态(走/跑/冲刺)、旋转模式(朝向视线方向、朝向速度方向、准)、第一 / 第三人称、动画叠层状态(动画的“风格”)和姿态(立/蹲下/趴下)。
  • 获取旋转初始数据?

每tick:

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