Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Мышь и входные координаты
О Godot Engine
Причина этого небольшого урока состоит в том, чтобы прояснить многие распространенные ошибки относительно входных координат, получения положения мыши, разрешения экрана и т. д.
Экранные координаты
Использование экранных координат имеет смысл при написании сложных графических интерфейсов, предназначенных для работы на ПК, например редакторов, MMO, инструментов и т. д. Однако за пределами этой области их применение не имеет особого смысла.
Координаты области просмотра
Godot использует области просмотра (viewports) для отображения контента, и эти области просмотра можно масштабировать с помощью нескольких параметров (см. руководство Несколько резолюций). Затем вы можете использовать функции в узлах для получения координат мыши и размера области просмотра, например:
func _input(event):
# Mouse in viewport coordinates.
if event is InputEventMouseButton:
print("Mouse Click/Unclick at: ", event.position)
elif event is InputEventMouseMotion:
print("Mouse Motion at: ", event.position)
# Print the size of the viewport.
print("Viewport Resolution is: ", get_viewport().get_visible_rect().size)
public override void _Input(InputEvent @event)
{
// Mouse in viewport coordinates.
if (@event is InputEventMouseButton eventMouseButton)
{
GD.Print("Mouse Click/Unclick at: ", eventMouseButton.Position);
}
else if (@event is InputEventMouseMotion eventMouseMotion)
{
GD.Print("Mouse Motion at: ", eventMouseMotion.Position);
}
// Print the size of the viewport.
GD.Print("Viewport Resolution is: ", GetViewport().GetVisibleRect().Size);
}
Кроме того, положение мыши можно запросить у области просмотра:
get_viewport().get_mouse_position()
GetViewport().GetMousePosition();
Примечание
Если режим мыши установлен на Input.MOUSE_MODE_CAPTURED, значение event.position из InputEventMouseMotion соответствует центру экрана. Для обработки перемещения мыши и изменения её положения используйте event.relative вместо event.position и event.velocity.
При реализации таких функций как mouselook, рекомендуется использовать event.screen_relative и event.screen_velocity вместо event.relative и event.velocity, чтобы движение мыши одинаково отображалось на различных разрешениях экрана.