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

Unity中用四元数实现均匀圆周运动,解决Y轴旋转翻转问题

解决Unity中Y轴旋转360度后翻转且无法均匀旋转的问题

问题原因

你当前Y轴旋转的计算逻辑存在本质问题:

float y_rotation = 2*(Mathf.Acos(Mathf.Cos(time*rate))*Mathf.Rad2Deg);

Mathf.Acos(Mathf.Cos(x))会将任意输入的x映射到[0, π]弧度区间,乘以2后得到[0, 360]的角度值。当time*rate超过π时,这个角度会从360度递减回0度,导致Y轴旋转方向反转,出现“翻转”现象,而非持续的单向均匀旋转。

至于你尝试transform.Rotate()未成功,大概率是因为未基于Time.deltaTime计算每帧的旋转增量,导致旋转速度失控或角度逻辑错误。

解决方案

要实现Y轴持续均匀的单向旋转,只需让Y轴角度随时间线性递增即可,无需使用余弦/反余弦的复杂计算。X轴的正弦旋转逻辑可保留,因为它符合你的需求。

修改后的代码示例

using UnityEngine;

public class time_behaviour : MonoBehaviour
{
    public float rate;
    public float x_axis_amplitude;

    void Update()
    {
        float time = Time.time;
        // 保留原X轴正弦旋转逻辑
        float x_rotation = x_axis_amplitude * Mathf.Asin(Mathf.Pow(Mathf.Sin(time * rate), 2)) * Mathf.Rad2Deg;
        // Y轴改为线性递增角度,实现持续单向均匀旋转
        // rate控制旋转速度,360f表示每秒旋转一圈,可根据需求调整
        float y_rotation = time * rate * 360f;
        // 直接设置本地旋转,Unity的四元数会自动处理角度超过360的情况,无翻转问题
        transform.localRotation = Quaternion.Euler(x_rotation, y_rotation, 0);

        Debug.Log(transform.rotation.eulerAngles);
    }
}

若偏好使用transform.Rotate()的实现方式

如果想通过增量旋转实现Y轴效果,需确保每帧旋转的增量基于Time.deltaTime,同时保持X轴的绝对正弦摆动:

using UnityEngine;

public class time_behaviour : MonoBehaviour
{
    public float rate;
    public float x_axis_amplitude;

    void Update()
    {
        float time = Time.time;
        // 计算X轴目标旋转角度
        float x_rotation = x_axis_amplitude * Mathf.Asin(Mathf.Pow(Mathf.Sin(time * rate), 2)) * Mathf.Rad2Deg;
        // 获取当前Y轴旋转角度,叠加每帧增量
        float currentY = transform.localEulerAngles.y;
        float yDelta = rate * Time.deltaTime * 360f;
        float newY = currentY + yDelta;
        // 设置最终旋转
        transform.localRotation = Quaternion.Euler(x_rotation, newY, 0);
    }
}

补充说明

  • 线性递增的角度值即使超过360度,Unity的四元数系统也能正确解析为持续的单向旋转,不会出现反转或翻转。
  • rate参数可直接控制旋转速度:值越大,X轴摆动和Y轴旋转的速度越快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:20:53