Godot raycast2D 区域检测不起作用

问题描述

我对 Godot 和 GDScript 比较陌生,但我学得很快,所以我开始尝试制作 2D 平台游戏,您可以在其中四处走动、在墙上攀爬和滑行、从墙上跳下并留在墙上。我正在使用从 x 轴上的玩家出发的 raycast2D 来检测玩家何时触摸 area2D(在这种情况下,也是一个 staticbody2D 的瓷砖)。为了测试这一点,我写道:

onready var raycast = get_node("RayCast2D")

func _physics_process(delta):

if raycast.collide_with_areas == true:
     print("area")

我遇到的问题是控制台一直在打印区域,这意味着我所有的图块都是 area2Ds(其中一些只是 staticbody2D)。为什么我所有的图块都是 area2Ds ?

解决方法

来自RayCast2D class documentation

bool collide_with_areas [default: false]
     set_collide_with_areas(value) setter
     is_collide_with_areas_enabled() getter

If true,collision with Area2Ds will be reported.

您使用 collide_with_areas 好像它表示光线投射当前是否与区域发生碰撞,而实际上它是一个类属性,表示光线投射是否应该报告与区域的碰撞。

相反,您应该将 collide_with_areas(和 enabled!)设置为 true(通过检查器或代码),然后调用 raycast.get_collider()