提问人:Hulda Gnodima 提问时间:9/22/2023 更新时间:9/22/2023 访问量:179
如何在 Godot 中以 2D 方式从光标/鼠标下方进行光线投射?
How does one Raycast from under the cursor/mouse in 2D in Godot?
问:
我属于在这里洗牌的团结人群,喜欢我所看到的:)我在网上找不到太多东西,所以想问一下,也许它将来会帮助其他人。
我添加了一个 Area2D 节点,其子节点是 CollisionShape2D(包含圆形) 我在场景中制作了一个 RayCast2D 节点。 我添加了一个脚本,我称之为“CheckUnderCursor”。 在其中,基于文档(但将传递的“Create”属性调整为鼠标光标位置)(但调整传递的“Create”属性为鼠标光标位置)
public override void _PhysicsProcess(double delta)
{
var spaceState = GetWorld2D().DirectSpaceState;
// use global coordinates, not local to node
var query = PhysicsRayQueryParameters2D.Create(GetViewport().GetMousePosition(), GetViewport().GetMousePosition() );
var result = spaceState.IntersectRay(query);
if (result.Count > 0)
{
GD.Print(result);
}
}
但是,将光标悬停在我知道对撞机所在的位置上不会打印任何命中。我想知道是否有人知道我哪里出了问题,以及如何在 Godot 2D 中直接从光标正确进行光线投射?:)我怀疑我给 Create 提供了错误的“to”位置,但我不知道我应该在 2D 空间中给出什么值。
提前非常感谢 <3
答:
1赞
Theraot
9/22/2023
#1
通常,您不需要这样做,因为您可以设置 to 的属性,然后覆盖 或 连接到信号。还有和信号。input_pickable
Area2D
true
_input_event
input_event
mouse_entered
mouse_exited
话虽如此,有时您需要通过其他方式进行查询......
现在有几件事:
- 您需要全局坐标(在本例中为 2D 世界的坐标)中的位置,而不是视口坐标。
- 你不想与光线相交,你想与一个点相交。
var spaceState = GetWorld2D().DirectSpaceState;
var query = new PhysicsPointQueryParameters2D();
query.position = GetGlobalMousePosition();
var result = spaceState.intersect_point(query);
if (result.Count > 0)
{
GD.Print(result);
}
顺便说一句,如果你需要调试你的碰撞体,你可以在“调试”菜单中启用“可见碰撞形状”。
我希望这会有所帮助。
评论