绕着轨道物体绕行的奇怪行为

时间:2019-12-26 10:37:44

标签: unity3d

我正在尝试使obj1围绕obj0旋转,并且类似地使obj2围绕obj1旋转,如下所示: (类似于太阳,地球,月亮,但在一架飞机上)

using UnityEngine;

public class orbitMove : MonoBehaviour
{
    public Transform pivot;

    void Update()
    {
        if(pivot!=null){
            transform.RotateAround(pivot.position, Vector3.up, Time.deltaTime * 77);
        }
    }
}

obj1绕obj0轨道很好,但是当我将obj2添加到obj1轨道时,它从obj1射出,并开始以不断增大的半径旋转。 我想念什么?

1 个答案:

答案 0 :(得分:4)

它对第一个有效但对第二个无效的原因如下:

我认为obj0是静态的并且不会在您的场景中移动->以恒定的偏移量围绕它旋转是没有问题的。

但是 obj1移动了。因此,当obj2在此帧中调用RotateAround时,枢轴obj1已经移动,因此偏移量每帧稍大,导致对枢轴的偏移量不断增加。


我个人更喜欢使用类似的结构

earthPivot
|-earth
moonPivot
|-moon

然后可以将枢轴设置到相应的位置,并使其围绕自身旋转。相应的子项会自动旋转,但与父项保持恒定的偏移量。然后,您仍然可以为子对象本身添加局部旋转,以便a)覆盖父旋转,并b)添加旋转本身。

public class PivotRotation : MonoBehaviour
{
    public Transform pivot;
    public float rotationSpeed;
    private void Update()
    {
        transform.position = pivot.position;
        transform.Rotate(Vector3.up * Time.deltaTime * rotationSpeed);
    }
}

还有孩子

public class ChildRotation : MonoBehaviour
{
    public float rotationSpeed;
    private Quaternion rotation;
    private void Update()
    {
        rotation *= Quaternion.Euler(0,Time.deltaTime * rotationSpeed, 0);
        transform.rotation = rotation;
    }
}

注意:在智能手机上输入文字,但我希望这个主意会清楚