错误:尝试在空实例上调用基本"空实例"中的函数"is_colliding"



我刚刚开始在Godot引擎中制作一个基本的fps,我目前正在制作一个基本的Raycast武器。我查阅了Coding With Tom、Gabaj YT和其他许多人的教程,但无论是哪一个,我最后总是写同样的代码:

如果Raycast.is_Colliding:

不管我怎么精确地复制它,我总是以同样的错误结束:

错误:试图在null实例上调用函数' is_collisions ' .

Raycast是一个类。is_colliding是其中一种方法。但它不是一个静态方法,你需要一个Raycast的实例。

很有可能,您确实有一个实例。如果你一直在跟随教程,大概你在场景树中添加了一个Raycast节点,它被称为……让我猜猜……Raycast。是的,我也这样做。直到它开始成为一个问题,我将其重命名为更有意义的东西或采用不同的方法,但我离题了。

问题是你没有引用Raycast实例。您可以从您的脚本参考节点使用$,像这样:$Raycast。它是使用get_node方法的简写。请参阅节点和场景实例。要清楚,您放在$之后的是场景树的相对路径,因此它可能不仅仅是节点的名称。这里我假设该节点是包含您正在编写的脚本的节点的直接子节点。

因此,我希望代码像这样:
if $Raycast.is_colliding():

当然,你会看到这样的代码:

if raycast.is_colliding():

这是因为在脚本的某个地方,他们有一行看起来像这样:

onready var raycast := $Raycast

声明了一个变量raycast,并且- ready -将其设置为对节点的引用,然后他们可以继续在那里使用该变量形式。有了视频教程,有些人可能会略过这些。我在Garbaj的视频中找到了它:Godot FPS Hitscan Weapons Tutorial at 1:52

最新更新