Найти в Дзене

№75. Выбор одной ноды из пересекающихся.

Для примера возьмем следующую сцену:
У нас есть префаб , в котором есть спрайт с area2D и скрипт который удаляет спрайт по клику.
Создадим новую сцену и положим два инстанса так, чтобы они пересекались в одной точке.
Кликаем, и получаем вполне предсказуемый и логичный результат — оба спрайта удалятся.
Оглавление

Для примера возьмем следующую сцену:

У нас есть префаб , в котором есть спрайт с area2D и скрипт который удаляет спрайт по клику.

Создадим новую сцену и положим два инстанса так, чтобы они пересекались в одной точке.

-2

Кликаем, и получаем вполне предсказуемый и логичный результат — оба спрайта удалятся.

-3

Так как нам надо получать только один объект для манипуляций , то далее есть по крайней мере два варианта :

Первый вариант.

Создаем массив на руте сцены, в него будем передавать имена из скрипта инстансов.
А удалять будем только первую ноду из массива.

Для кучности я добавил еще одну ноду.
Для кучности я добавил еще одну ноду.

Из гифки видно как по клику в массив закидываются все попавшие в зону клика ноды, и после чего удаляется первая нода в массиве.

Второй вариант.

Он заключается в том, что мы помечаем инпут как отработанный. После чего он нам не возвращает больше ничего.
За это отвечает метод
set_input_as_handled()

В данном случае мы в скрипте указываем, что далее ловить ничего не нужно и это всё.

Результат будет таким же как и в первом случае.

-5

***

С нодами класса Control всё обстоит немного иначе. Так как они изначально имеют свои сигналы для обработки клика , а так же приоритет при отлове клика. (mouse filter)

Тут достаточно просто подключить вместо input метода , gui_input сигнал, и всё будет удаляться по очереди.

-6

За сим всё. Удачи !

Подписывайтесь на канал, и вступайте в группу в ВК.