Persey14
@Persey14
Будущий геимдизайнер-программист Изучаю Unity и C#

Как сделать настоящую планетную гравитацию в Unity?

Хочу создать игру с круглой планетой и с нормальной гравитацией и чтобы объекты подчинялись законам физики и чтобы игрок был всегда горизонтален к земле(как в Super Mario Galaxy) но не знаю как.
  • Вопрос задан
  • 1634 просмотра
Решения вопроса 1
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова… Пользователь может играть лесными эльфами, охраной дворца и злодеем. И если пользователь играет эльфами то эльфы в лесу, домики деревяные набигают солдаты дворца и злодеи. Можно грабить корованы…


Делаем много мешей (планета в форме шара, игрока и прочее), добавляем им примерно такой скрипт:
class Gravity : MonoBehaviou {
    static const double G = 9.8; // correct constant here

    static LinkedList<Gravity> meshes = new LinkedList<Gravity>();

    float Mass {
        get {
            return GetComponent<Rigidbody>().mass;
        }
    }

    void Start() {
        meshes.add(this);
    }

    void Update() {
        foreach(var mesh in meshes) {
            float power = (float)(G*Mass*mesh.mass);
            var force = power*(mesh.transform.position - transform.position).normalized;
            force /= (mesh.transform.position - transform.position).sqrMagnitude;
            GetComponent<Rigidbody>().AddForce(force);
        }
    }
}


Горизонтальность оставим в качестве домашнего задания. Подсказка - нужно повернуть меш игрока так, чтобы он был сонаправлен с вектором земля-игрок.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы