Найти тему
Игровой движок Godot engine

№199. Godot4. Двигаем RigidBody.

В один прекрасный день вам захочется перенести физическое тело в новые координаты.

гифка для примера
гифка для примера

В этой статье попробую подсветить основные моменты связанные с этой задачей.

Создаем сцену, добавляем пару статиков (staticbody2d) и один ригид (rigidbody2d).

Сразу включаем отображение шейпов

-2

Сцена:

-3

Я еще отдельно «замапил» клик мышкой

-4

Заглянув в документацию мы можем увидеть несколько очень важных замечаний :

-5

-6

Все они сводятся к тому , что вы можете передавать новые координаты физическому телу, но делать это напрямую не рекомендуется так как это может привести к ошибкам.

Если вам необходимо воздействовать на позиции, или какие-то иные свойства, то лучше делать это в _integrate_forces() методе.
Заглянем в описание метода :

-7

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

И вот тут кроется самое важное
Если вам нужно менять свойства объекта 
непосредственно в физической симуляции - то используем _integrate_forces() .
Если вам нужно модифицировать свойства объекта 
вне физической симуляции , то мы можем просто «заморозить» (freeze) объект на время, и потом «разморозить»

Свойство Freeze отключает воздействие гравитации и всяких сил, и по сути объект становится статичным телом. ( в документации указано, что если вам нужно именно статичное тело, то лучше использовать StaticBody2D).

-8

Погнали кодить.


Скрипт вешаем на любую ноду, я подвесил на корневую сцены.
В инпуте переведим ригид во
Freeze состояние.
Далее в physics_process мы указываем для transform.origin координаты курсора.
И это всё.

-9

Результат:

-10

На этом пожалуй всё.
Подписывайтесь на канал,
вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !

-11