我正在尝试使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射出,并开始以不断增大的半径旋转。 我想念什么?
答案 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;
}
}
注意:在智能手机上输入文字,但我希望这个主意会清楚