You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity俯视角射击:如何基于瞄准方向计算相对移动向量实现 Strafing 动画

解决Unity俯视角瞄准 Strafing 动画的相对移动向量计算问题

要将世界空间的移动向量转换为相对于瞄准方向的局部空间向量,以此驱动混合树的AimingWalkHorizontal和AimingWalkVertical参数,你可以通过以下步骤实现:

核心思路

将玩家的世界移动方向,转换到以瞄准方向为前向的局部坐标系中,这样得到的向量分量就能直接对应 Strafing 动画的水平/垂直参数。

完整代码实现

// 确保向量在XZ平面且归一化(避免缩放干扰动画参数)
Vector3 movementVector = new Vector3(_movementVector.x, 0, _movementVector.y).normalized;
Vector3 aimingDirection = new Vector3(
    MouseWorldPosition.x - PlayerController.PlayerObj.transform.position.x,
    0,
    MouseWorldPosition.z - PlayerController.PlayerObj.transform.position.z
).normalized;

// 创建以瞄准方向为前向的旋转(保持世界Y轴为上方向,适配俯视角平面移动)
Quaternion aimLocalRotation = Quaternion.LookRotation(aimingDirection, Vector3.up);

// 将世界空间移动向量转换为瞄准局部空间的向量
Vector3 relativeMovement = aimLocalRotation.InverseTransformDirection(movementVector);

// 赋值给Animator混合树参数
PlayerController.Animator.SetFloat("AimingWalkHorizontal", relativeMovement.x);
PlayerController.Animator.SetFloat("AimingWalkVertical", relativeMovement.z);

参数对应说明

  • 当玩家向右 Strafing(相对于瞄准方向的右侧移动),relativeMovement.x会输出1,relativeMovement.z输出0,完全匹配你设置的混合树触发条件。
  • relativeMovement.x正负对应左右 Strafing 方向,relativeMovement.z正负对应相对于瞄准方向的前后移动。
  • 若需要让动画速度随移动快慢变化,可移除normalized保留向量原始长度,此时参数值的大小会直接影响动画播放速率。

内容的提问来源于stack exchange,提问作者Vít Vohrálek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:13:26