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

Unity2D中使用transform.RotateAround()切换月球旋转方向问题

双月球绕行星游戏的旋转问题与RotateAround原理说明

我正在制作一款双月球绕行星运行的简易游戏,希望通过按键切换月球A的旋转方向,相关代码如下:

public KeyCode switch_rotation_moon_a;
private bool rotating_left = false;
private void Update()
{
    if (Input.GetKeyDown(switch_rotation_moon_a))
    {
        rotating_left = !rotating_left;
    }
}

其中rotating_left变量用于决定旋转方向,旋转实现代码如下:

private void FixedUpdate()
{
    planet_position = radius * Vector3.Normalize(this.transform.position - planet.transform.position) + planet.transform.position;
    this.transform.position = planet_position;
    if (rotating_left)
    {
        transform.RotateAround(planet.transform.position, new Vector3(0, 0, 1), rotation_speed);
    }
    transform.RotateAround(planet.transform.position, new Vector3(0, 0, -1), rotation_speed);
}

游戏启动时月球初始方向旋转正常,但反转Z轴后旋转停止。我查阅了transform.RotateAround()的相关资料,但难以理解其具体数学原理,希望得到该方法的简易数学原理说明,无需现成代码。


RotateAround简易数学原理说明

  • 核心逻辑:RotateAround本质基于轴角旋转实现,它会让目标物体围绕指定中心点,沿给定旋转轴,按设定角度值做圆周运动。
  • 右手定则判断方向:旋转方向遵循右手定则——将右手拇指指向旋转轴正方向,其余四指弯曲的方向就是物体旋转的方向。比如Vector3(0,0,1)是Z轴正方向,此时四指弯曲方向为顺时针(从场景正上方俯视);Vector3(0,0,-1)是Z轴负方向,四指弯曲方向则为逆时针。
  • 单次旋转的数学过程:
    1. 计算物体当前位置到中心点的向量(即半径向量);
    2. 以旋转轴为基准,对该半径向量做旋转变换(通过旋转矩阵或四元数计算,本质是让向量绕轴转动指定角度);
    3. 用变换后的向量加上中心点坐标,得到物体新位置,完成一次旋转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:35:19