鼠标和输入坐标

关于

这个小教程的原因是为了清除输入坐标、获取鼠标位置和屏幕分辨率等许多常见错误。

硬件显示坐标

在编写要在PC上运行的复杂UI(如编辑器、MMO、工具等)的情况下,使用硬件坐标是有意义的。但是,在该范围之外,它没有那么多意义。

视区显示坐标

Godot使用视区来显示内容,视区可以通过几个选项进行缩放(请参见 多分辨率 教程)。然后,使用节点中的函数获取鼠标坐标和视区大小,例如:

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_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: ", GetViewportRect().Size);
}

或者,可以向视区询问鼠标位置:

get_viewport().get_mouse_position()
GetViewport().GetMousePosition();

注解

当鼠标模式设置为 Input.MOUSE_MODE_CAPTURED , the event.position 值来自 InputEventMouseMotion 是屏幕的中心。使用 event.relative 而不是 event.position 处理鼠标移动和位置更改。