获取鼠标单击的 GlobalPosition 坐标时出现问题

问题描述 投票:0回答:1

我正在尝试通过单击鼠标来获取全局坐标。例如,生成生物或改变游戏区域中某些对象的状态。 但是当我深入研究 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#。

c# mouseevent godot godot4
1个回答
0
投票

这解决了我的问题:

    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

© www.soinside.com 2019 - 2024. All rights reserved.