Найти в Дзене
Игровой движок Godot engine

№55. RayСast2D.

RayCast2D позволяет нам при помощи луча искать пересечения с объектами.
Подключается как дочерняя нода.

Cast to отвечает за направление луча. По умолчанию он смотрит вертикально вниз.

Закладка Collide With содержит два пункта area и bodies . Cоответственно мы можем отключить обнаружение того или иного типа объекта.

Первый тип — Area2D , второй тип это все физические тела : KinematicBody, RidigBody, StaticBody .

Я сделал небольшую сценку. В ней к спрайту (godot) подключена нода RayCast2D .
И ниже находятся два объекта : monster_1_area и monster_2_body. Первый на Area2D , второй на StaticBody2D.
Заодно в сцене я добавил ноду Label , для показа имени ноды с которой наш луч будет пересекаться.

-2

Для того чтобы видеть наш луч и зоны соударений объектов во время работы приложения, нам надо поставить галочку возле Visible Collision Shapes

-3

По умолчанию в ноде RayCast2D установлена галочка возле bodies. В моем случае я активировал еще и area. Для наглядности.

Давайте попробуем вывести имя объекта с которым пересечется наш луч.
Для этого есть метод
get_collider().

Искать будем в _process. Код выглядит таким образом :

-4

Двигаем луч , и получаем имя наших монстров.

-5

Важно. Луч считает соударения не с кончика стрелки, а с конца линии.

-6

Что мы можем получить еще.
К примеру точку, где луч пересекает монстра. Смотрим в доки , и видим название метода
get_collision_point() , который возвращает нам вектор.

Подключим его, и создадим в точке пересечения ColorRect по нажатию кнопки на мышке.

-7

Как видим всё работает как и должно работать.

За сим пожалуй всё. Удачи !