Гравитация у планеты
На планете висит 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 будет уже явно мало.