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

Unity 3D:如何获取物体相对自身旋转的运动方向向量?

俯视角角色控制器动画方向匹配解决方案

核心问题是你用了世界空间的移动方向驱动动画,但动画需要的是相对于角色模型自身朝向的本地空间方向。直接做空间转换就能解决,具体实现如下:

关键代码实现

在计算完moveDirectionNormalized之后,添加这段代码把世界方向转成模型本地方向,再传给Animator参数:

// 将世界空间的移动方向转换为角色模型本地空间的方向
Vector3 localMoveDir = MeshCharacter.InverseTransformDirection(moveDirectionNormalized);
// 忽略垂直方向(俯视角不需要Y轴),只保留平面上的方向
localMoveDir.y = 0f;
// 确保向量归一化,避免参数值超出-1~1范围
if(localMoveDir.magnitude > 0.01f)
    localMoveDir = localMoveDir.normalized;
else
    localMoveDir = Vector3.zero;

// 给Animator的2D混合树参数赋值:X对应左右,Z对应前后(匹配你要的MoveDirectionX/Y)
_animator.SetFloat("MoveDirectionX", localMoveDir.x);
_animator.SetFloat("MoveDirectionY", localMoveDir.z);

代码解释

  • InverseTransformDirection:Unity内置方法,专门用来把世界空间向量转换成当前Transform(这里是MeshCharacter)本地空间的向量。比如角色模型面朝敌人时,向后移动的世界方向会被转换成本地空间的(0,0,-1),对应你要的(0,-1)(把Z值传给MoveDirectionY即可)。
  • 过滤Y轴:俯视角下角色移动在XZ平面,Y是垂直方向,直接设为0避免干扰。
  • 归一化处理:确保参数值严格在-1~1之间,和动画混合树的配置匹配,防止动画过渡异常。

代码放置位置

把这段代码放在移动逻辑(_characterPlayer.Move(...))执行完、模型转向逻辑之后,用来更新Animator参数即可。

内容的提问来源于stack exchange,提问作者UniDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:46:16