Я рекомендую использовать transform.RotateAround () в функции обновления Луны.
using UnityEngine;
public class Orbit : MonoBehaviour
{
/* the object to orbit */
public Transform target;
/* speed of orbit (in degrees/second) */
public float speed;
public Update()
{
if (target != null) {
transform.RotateAround(target.position, Vector3.up, speed * Time.deltaTime);
}
}
}
ОБНОВЛЕНИЕ:
Чтобы сделатьЛуна вращается вокруг Земли, а Земля вращается вокруг Солнца, вы должны сделать Луну дочерью Земли.Добавьте приведенный выше скрипт к нему.Тогда он будет находиться в координатном пространстве Земли, что означает, что он будет оставаться в том же относительном положении.Затем вы можете прикрепить скрипт к Земле, а потомку Земли к Солнцу.
Если вы выберете такой подход, я бы порекомендовал изменить скрипт следующим образом:
using UnityEngine;
public class Orbit : MonoBehaviour
{
/* speed of orbit (in degrees/second) */
public float speed;
public Update()
{
Transform target = transform.parent;
if (target != null) {
transform.RotateAround(target.position, Vector3.up, speed * Time.deltaTime);
}
}
}