xenofob

xenofob

На Пикабу
Дата рождения: 13 января
13К рейтинг 5 подписчиков 12 подписок 31 пост 9 в горячем
Награды:
10 лет на Пикабу
22

Физика в Godot 3.5 на примере одной машинки

Всем привет!


Да, вот так бывает, сидишь никого не трогаешь, примус починяешь Годот ковыряешь, статейки почитываешь, а потом тебе пишет @Boogernator, мол запили пост про машинку, которую ты мне показывал, а то я уже и анонс сделал 😁


Ну мне не жалко, если людям интересно то пожалуйста. Постарался максимально сжато и без воды. Поехали.


Вам понадобятся спрайты кузова и колеса автомобиля. Я использовал бесплатный ассет, в котором на выбор 12 видов транспорта.


Создайте в редакторе новый проект и создайте в нем папку res://assets/, куда добавьте два изображения - кузов и колесо:

Следующим шагом создайте сцену на основе узла RigidBody2D, назовите его Car и к нему дочерними узлами добавьте узлы Sprite и ColissionPolygon2D. В текстуру спрайта перетащите изображение кузова и в свойстве Scale установите значение 0.3:

Для добавления формы столкновения выберите узел ColissionPolygon2D и с помощью точек обведите контур кузова:

Узлу Car в инспекторе задайте массу и гравитацию, с этими значениями можно будет потом поиграть, чтобы добиться нужного результата:

Для колес создайте два узла RigidBody2D с дочерними элементами Sprite и CollisionShape2D. Добавьте текстуру и установите значение Scale на 0.3 по аналогии с кузовом. Разместите колеса на нужных местах, для удобства можете воспользоваться направляющей. Также добавьте форму у коллизий по форме колес:

Колесам тоже задайте гравитацию и массу:

Чтобы присоединить колеса к кузову автомобиля добавьте на сцену два узла Pinjoint2D и разместите их в дереве узлов по одному под каждым колесом а на сцене поставьте по центру каждого колеса:

Теперь у каждого узла Pinjoint2D в инспекторе надо выбрать узлы, которые он будет соединять. У заднего колеса это узлы WheelLeft и Car, у переднего WheelRight и Car соответственно:

Создайте сцену с именем Main на Node2D, это будет главная сцена с дорогой по которой поедет автомобиль. Создайте дорогу и ограничивающие барьеры на основе StaticBody2D, задайте им коллизию и текстуру, я использовал иконку годо. Сделайте эту сцену главной кликнув правой кнопкой мыши по сцене в панели файловой системы:

На главную сцену добавьте сцену с автомобилем как дочернюю:

Запустите проект (F5) и убедитесь, что автомобиль собран правильно, колеса не отваливаются и т.п.

Осталось написать несколько cтрок кода, в которых собственно вся сила поста. Т.к. RigidBody2D это физическое тело вы не можете его контролировать напрямую как KinematicBody2D, вместо этого используются гравитация, импульсы и т.д. Двигать автомобиль будем путем подачи крутящего момента на колесо при нажатии клавиш Right и Left.


Прикрепите к узлу Car скрипт со следующим содержимым:

Можно запускать и проверять:

Кому лениво все это повторять можете качнуть репозиторий.


На этом все. Всем приятных экспериментов! 🚕

Показать полностью 12 2
Отличная работа, все прочитано!