我正在尝试通过单击鼠标来获取全局坐标。例如,生成生物或改变游戏区域中某些对象的状态。 但是当我深入研究 InputEventMouseButton 时,发现该事件仅接收视口坐标......而不是全局坐标。 也许我没有完全理解InputEventMouseButton? 或者有人知道实现目标的替代方法吗?
首先,InputEventMouseButton 的本地坐标和全局坐标到底是什么?测试表明 GlobalPosition 总是比 Position 大 2 倍。
但我就是不明白为什么会这样......
结果,这段代码在本地坐标中生成了小怪:
public override void _UnhandledInput(InputEvent @event)
{
if (@event is InputEventMouseButton mouseEvent_1 && Input.IsActionPressed("attack"))
{
EnemySlime newSlime_1 = Slime.Instantiate<EnemySlime>();
newSlime_1.Position = mouseEvent_1.Position;
AddChild(newSlime_1);
}
}
但是如果英雄(以及跟随他的摄像机)移动到一边,无论我使用 GlobalPosition、将摄像机位置添加到鼠标点击位置还是其他任何方式,小怪都不想在我点击的地方生成。
P.S.,我是用C#编写的,但是如果你用GDScript描述实现,稍后我会以某种方式将其翻译成C#。
这解决了我的问题:
public override void _UnhandledInput(InputEvent @event)
{
if (@event is InputEventMouseButton mouseEvent_1 && Input.IsActionPressed("attack"))
{
EnemySlime newSlime_1 = Slime.Instantiate<EnemySlime>();
newSlime_1.Position = GetGlobalMousePosition();
AddChild(newSlime_1);
}
}
GetGlobalMousePosition() 给出必要的坐标。
来源:https://ask.godotengine.org/11538/get-mouse-position-in-world?show=11538#q11538