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

如何使用Lerp命令实现Unity物体仅沿顺时针(向右)方向旋转

Unity强制顺时针旋转(解决Quaternion.Lerp默认走最短路径问题)

问题原因

Quaternion.Lerp/Quaternion.Slerp 插值时只会计算两个四元数之间的最短旋转弧,因为四元数本身仅记录旋转的最终姿态,不记录旋转路径方向。你需要的313度顺时针旋转和47度逆时针旋转最终姿态完全一致,因此引擎默认选择了更短的47度路径。
参考示意图:
旋转路径示意图

解决方案

不要直接对四元数做插值,自行维护旋转角度的数值,手动控制旋转方向即可,代码示例如下:

// 类内声明成员变量,自行维护角度值,避免读取transform.eulerAngles时的自动0-360度归整问题
private float currentYRotation;
private float targetYRotation;

private void Start()
{
    // 初始化时读取一次初始角度
    currentYRotation = transform.rotation.eulerAngles.y;
    // 顺时针旋转313度,对应Y轴角度减少313(如果实际方向相反可改为+313)
    targetYRotation = currentYRotation - 313f;
}

private void Update()
{
    // 对自定义的角度变量做插值
    currentYRotation = Mathf.Lerp(currentYRotation, targetYRotation, 3f * Time.deltaTime);
    // 赋值给物体旋转
    transform.rotation = Quaternion.Euler(0, currentYRotation, 0);
}

注意事项

不要直接读取transform.eulerAngles.y做每帧的运算逻辑,Unity会自动将欧拉角的取值限制在0~360度区间,角度超出范围时会自动取模,导致角度跳变,打乱旋转方向控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:21:01