2

Жигули. Физика. Боль

С персонажем разобрался — ходит, бегает, руки почти готовы. Пора за машину. Игра же не про прогулки по обочине.

Сразу скажу: встроенный VehicleBody из Godot я выкинул. Он мыльный. Машина кренится как маршрутка на повороте, переворачивается на ровном месте, подвеска живёт своей жизнью. Помучился два вечера и решил — буду делать сам.

Взял обычный RigidBody3D и написал свою физику. Колёса через RayCast3D — пускаю луч вниз, нахожу землю, считаю подвеску руками. Двигатель, коробка, тормоза — всё отдельно. Звучит как велосипед, но зато я понимаю что где крутить.

Что внутри

Машина собрана из модулей. Каждый — отдельный скрипт:

  • MyCar — корень сцены. Посадка, высадка, камера, руль мышкой.

  • MyCarPhysics — колёса на raycast-ах, подвеска, руль, тормоза, ручник.

  • MyCarEngine — двигатель. Обороты, газ, запуск с ключа.

  • MyCarTransmission — коробка. N, R, 1–4. Передаточные числа.

  • MyCarDebug — панель поверх экрана. Показывает RPM, передачу, ручник, ошибки. Штука дико полезная, без неё вообще не понять что происходит.

Дерево сцены:

Что работает

Садишься в машину — камера переключается на салон. Руль мышкой, газ W, тормоз S. Двигатель заводится на Q, слышно как обороты растут. Передачи переключаются стрелками — N, R, 1–4. Ручник на пробел. Фары, поворотники, аварийка — всё работает. Дебаг-панель пишет RPM, передачу, газ, какие колёса на земле.

Движок считает обороты:

Сердце двигателя. Обороты считаются от скорости машины и передачи. Если колёса не крутятся — RPM растёт только от газа до отсечки. Если машина едет — обороты привязаны к скорости через передаточные числа. Никаких левых таблиц, чистая математика.

Сердце двигателя. Обороты считаются от скорости машины и передачи. Если колёса не крутятся — RPM растёт только от газа до отсечки. Если машина едет — обороты привязаны к скорости через передаточные числа. Никаких левых таблиц, чистая математика.

Физика ищет землю raycast-ами и считает подвеску:

Где затык

Она не едет.

Серьёзно. Двигатель запущен, обороты растут, передача воткнута, колёса землю видят — а машина стоит. Или дёргается на месте и глохнет. Силу я прикладываю через apply_force к точке контакта колеса. Подозреваю что где-то путаю вектор направления, либо traction обрезает всё в ноль, либо точку приложения считаю не оттуда.

Дебаг-панель показывает: RPM 2500, Force 150, колёса на земле 4/4, а скорость 0.0. Два вечера ковыряю эту математику, меняю знаки, переставляю векторы — пока глухо.

Если кто писал физику машины на RigidBody3D с raycast-колёсами — подскажите. Особенно интересно: в какую сторону у вас forward (я беру -basis.z), как правильно apply_force к точке контакта, и как считать traction от силы подвески.

Дальше: сцепление, расход топлива по-человечески, поломки, ремонт. Но сначала надо чтобы оно просто поехало вперёд. Я выдохся, нужен свежий взгляд.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества