В этой небольшой статье соберем проект в котором наш герой проходя мимо коробок сможет при желании их пнуть.
Персонаж у нас будет собран на ноде KinematicBody2D, уровень на TileMap, а коробки это RigidBody2D.
Вся сцена в моем случае выглядит вот так :
Персонаж у нас отдельной сценой :
Итак, по сути у нас тут одна единственная проблема : столкновения персонажа и коробок,так как кинематик по умолчанию взаимодеиствует с физическими телами.
Решается это обычным разносом обьектов по слоям колизий. В моем случае коробки я вынес во второй слой.
Можно заметить что персонажу добавлен рейкаст. С помощью него мы собственно и определяем, есть нам что пинать или нет.
При обнаружении обьекта над головой персонажа появляется облако со знаком восклицания.
Луч один, при повороте персонажа влево, луч поворачивается влево через код.
Нам так же надо указать в настройках рейкаста, что он должен ловить предметы из второго слоя колизий.
Ну и не забываем, что рейкаст по умолчанию выключен, и его надо активировать.
Ну а теперь, что касается кода.
Скрипт персонажа содержит в себе данные по направлению. Т.е в определенный момент времени мы знаем в какую сторону направлен пересонаж. Это необходимо для того, чтобы знать в какую сторону должна лететь коробка при пинке.
В моем случае переменная направления это side.
Нажимаем кнопку пинка, и прогоняем следующий код.
get_parent().kick - это функция из корневого скрипта. Она принимает имя , и два значения — направление полета, и угловое ускорение.
Всё это подается в итоге на коробки.
ВАЖНО .
Если вы пытаетесь повторить это в Godot4, то учтите что теперь импульс идет первым аргументом !!!
Вот в общем то и вся магия. Ниже гифка с «внутренностями».
Надеюсь вам был полезен этот материал.
Подписывайтесь на канал, вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !
#godot #gdscript #игровой движок #программирование #игры #уроки