Как сделать гравитацию для нескольких планет в Unity3d

То, что я хочу сделать, это что-то похожее на нашу Солнечную систему, где вас гравитационно притягивает к одной планете, пока вы не покинете ее притяжение, а затем, как только вы окажетесь на другой планете, вас притянет эта гравитация.

Я нашел много статей в Интернете о том, как создать гравитацию для одной планеты, но не нашел работы для нескольких источников.

Любая помощь будет принята с благодарностью.

Проекты, которые я уже рассматривал, в основном касались гравитации одной планеты.

unity 3.3, создайте локальную гравитацию на объекте

http://answers.unity3d.com/questions/13639/how-do-i-make-a-small-planet-with-gravitational-pu.html

http://answers.unity3d.com/questions/701618/how-could-i-simulate-planetary-gravity-that-has-an.html


person Benjamin Jameson    schedule 16.02.2015    source источник
comment
Классная идея! Можете ли вы поделиться с нами тем, что вы узнали о том, как создать гравитацию для одной планеты? Это может помочь нам помочь вам!   -  person ʇolɐǝz ǝɥʇ qoq    schedule 16.02.2015
comment
Я определенно попытаюсь объединить эти ресурсы в список ссылок на эти темы, если это разрешено здесь.   -  person Benjamin Jameson    schedule 18.02.2015


Ответы (1)


Это можно легко сделать, добавив нормальную силу относительно планеты на окружающие объекты.

Согласно физике силы всемирного тяготения, вы можете вычислить силу тяготения. Затем рассчитывают нормальную силу в данный момент и добавляют силу.

void FixedUpdate(){
    // Do the Force calculation (refer universal gravitation for more info)
    // Use numbers to adjust force, distance will be changing over time!
    forceSun = G x (massPlanet x massSun)/d^2;

    // Find the Normal direction
    Vector3 normalDirectionSun = (planet.position - sun.position).normalized;

    // calculate the force on the object from the planet
    Vector3 normalForceSun = normalDirection * forceSun;

    // Calculate for the other systems on your solar system similarly
    // Apply all these forces on current planet's rigidbody

    // Apply the force on the rigid body of the surrounding object/s
    rigidbody.AddForce(normalForceSun);

   // .... add forces of other objects. 
}

С различными значениями m1, m2 вы сможете сделать систему более реалистичной. Например, заставьте объект двигаться/ускоряться по направлению к планетам с большей массой.

person Dinal24    schedule 16.02.2015
comment
@BenjaminJameson, ты пробовал это? - person Dinal24; 17.02.2015
comment
Я очень благодарен вам за быстрые ответы, я должен сказать, что, будучи полным нубом, я не ожидал этого. Последние несколько лет я работаю по 18 часов в день, поэтому у меня не было времени, я постараюсь опубликовать все мысли, которые я уже нашел. Еще раз большое спасибо, ребята, и мне жаль, что я еще не смог попробовать это Dinal24, я надеюсь, что смогу сделать это не позднее завтрашнего вечера. - person Benjamin Jameson; 18.02.2015
comment
Можно ли сделать так, чтобы скрипт Gravity применялся только к самой планете, не затрагивая другие планетарные тела, по причинам дизайна я не планирую иметь систему вращения, и я хочу иметь возможность создавать и уничтожать планеты в игре, поэтому Я бы не хотел, чтобы Гравитация и ее эффекты зависели от других тел вокруг нее. - person Benjamin Jameson; 18.02.2015
comment
@BenjaminJameson Я думаю, что это невозможно! и когда вы говорите о причинах дизайна, вы можете легко прикрепить это к каждому объекту в системе и сохранить их как префабы. На самом деле это потребует некоторого опыта в единстве и использовании таких методов, как FindWithTag("Planet") и получить гравитацию и применить их к другим игровым объектам. Также, если этот ответ был полезен, вы можете быть благодарны мне, проголосовав за него и приняв ответ! - person Dinal24; 18.02.2015
comment
@BenjaminJameson Если вы используете компонент Gravity, он может хранить статический список (static HashSet<Gravity>) всех активных Gravities, и каждый экземпляр будет добавлять/удалять себя с помощью OnEnable/OnDisable. Это в основном то же самое, что предложил Dinal24, но более безопасный и гибкий, не зависящий от объектов, имеющих определенный тег. - person piojo; 18.02.2015