Гравитация у планеты

На планете висит Sphere Collider, который больше планеты в 2 раза, когда объект входит в триггер, то его Rigidbody добавляется в List objs, после этого в FixedUpdate, объекту даётся сила по направлению планеты, как можно сделать когда объекты ближе к планете, то сила увеличивалась?

public Transform planetTransform;

List<Rigidbody> objs = new List<Rigidbody>();

void FixedUpdate()
{
    foreach (Rigidbody r in objs)
    {
        r.AddForce((planetTransform.position - r.position) * 2000f * Time.fixedDeltaTime);
    }
}

void OnTriggerEnter(Collider other)
{
    objs.Add(other.GetComponent<Rigidbody>());
}

Ответы (1 шт):

Автор решения: Нетерпеливый игуан

По закону всемирно тяготения F(сила притяжения)=G(гравитационная постоянная)*m1(масса первого тела)*m2(масса второго тела)/r^2

Главное тут деление на r^2, то есть деление на расстояние между телами в квадрате. Именно поэтому по мере сближения сила квадратично увеличивается. Соответственно просто добавьте разделение на квадрат расстояния, что-то типа:

var magnitude = (planetTransform.position - r.position).magnitude; // расстояние
r.AddForce((planetTransform.position - r.position) * 2000f * Time.fixedDeltaTime / (magnitude * magnitude ));

Ну и с коэффициэнтами поиграться придется, из-за разделения константы 2000f будет уже явно мало.

→ Ссылка