如果 Godot 脚本 A 和 B 都扩展了脚本 C,那么 A 和 B 是否与 C 中的变量名相同?

If Godot scripts A and B both extend script C, do A and B share the same variable names of those from C?

我是 Godot 引擎的新手。

如果 gd 脚本 A 和 B 都扩展了脚本 C,并且 var_c 是脚本 C 中的变量,那么 A 中使用的 var_c 与 B 中使用的 var_c 是否不同?

所以我的脚本 A 和 B 扩展了脚本 C。 A 和 B 代表有限语句机中的不同状态。 例如,在 Godot 的初始安装(来自 Steam)附带的有限状态机演示中,假设 C 是 motion.gd 并且 A、B 是 move.gd 和 jump.gd.

我在 C 中引入了一个变量 var_c,希望它是 A 和 B 的 "shared",因为如果 var_c 在状态 A 中更新(假设我写

var_c = 123

在脚本 A) 中,当我进入状态 B 时,我希望访问 var_c 的更新值,例如

if var_c == 123:
     print("A and B seem to share the same value of var_c!")

不幸的是,我在状态A中调用的var_c似乎独立于在状态B中调用的var_c。我可能犯了一个错误,但我想知道这是不是真的一般。

A中使用的var_c和B中使用的var_c一样吗?如果它们不同,我如何从另一个访问一个?喜欢 A.var_c 和 B.var_c?

谢谢。

如果每个脚本都有唯一的名称(例如:examplescriptA.gd 和 examplescriptB.gd),其中包含的变量应该是该脚本的本地变量,因为 Godot 并不真正识别全局变量最严格的意义。 如果你想要一个全局变量系统的等价物(即:一组可以从任何其他脚本访问和更新的变量),你应该考虑使用 singletons.

文档在这里 - https://docs.godotengine.org/en/stable/getting_started/step_by_step/singletons_autoload.html

我也读过 "extending" 脚本的概念,显然这是可能的。您似乎可以更改脚本中的节点继承以扩展另一个脚本(例如:extends "res://your_script.gd")。唯一的怪癖似乎是您必须在 "parent" 脚本的 _ready() 函数中调用 .ready()。然而,我还没有机会亲自测试它,而且我不确定它是否在两个方向上都有效——为此,我会选择单身路线。无论如何,如果您需要更好地参考我从中获取的完整讨论,您可以在这里找到它:https://godotengine.org/qa/2391/can-you-inherit-from-a-script

我希望其中至少有一项对您有所帮助。