Когда я начал свою игру, я был совершенно новичком в Godot и сделал много неверных решений при разработке структуры узла. Несколько месяцев спустя я исправил структуру узла, но обнаружил, что мои объекты CollisionShape2D больше не взаимодействуют с мышью; нет ответа на _on_mouse_entered, _on_mouse_exited или щелчки мыши. Я предполагаю, что что-то потребляет ввод мыши, но я в растерянности после устранения неполадок в течение нескольких дней.
Пока у меня есть:
Обычно это какой-то Control
, потребляющий ввод, и вам нужно установить для него mouse_filter
значение «Игнорировать» (MOUSE_FILTER_IGNORE
). Control
будет иметь приоритет над Node2D
независимо от того, где они находятся в дереве сцены.
Если у вас возникли проблемы с определением того, какой Control
потребляет ввод, вы можете запустить игру из редактора, перейти на панель отладчика и на вкладке «Разное» Godot покажет вам, что вы нажали.
Чтобы ваш CollisionObject2D
мог принимать ввод с помощью указателя, вы должны убедиться, что его input_pickable
вашего установлен на true
(это было значение по умолчанию в Godot 3.x, но по умолчанию оно равно false
в Godot 4.x, так что это потенциальная ошибка).
В случае SubViewport
, если вы хотите, чтобы то, что находится внутри, принимало входные данные, убедитесь, что gui_disable_input
SubViewport
установлено на true
, а также — как я полагаю, вы сделали — что mouse_filter
SubViewportContainer
установлено на " Стоп» (MOUSE_FILTER_STOP
).
Как всегда, спасибо за исчерпывающий ответ. Тем не менее, я не мог заставить CollisionObject2D принимать входные данные, пока не установил для фильтра мыши SubViewportContainer значение «Pass». Разное на экране отладчика отражало, что SubviewportContainer перехватывал клики с фильтром мыши, установленным на «Стоп», но ничего не происходило. Переключил на "Pass" и функциональность вернулась... для меня загадка.