[Godot] GDScript 的坑:在一个脚本中 new 另外一个脚本

435 阅读1分钟

1.在一个脚本中 new 另外一个脚本

godotengine.org/qa/2627/_re…

如果在游戏运行时,在一个脚本 Main 中 new 另外一个脚本 A

那么这个脚本 A 将不会被触发 _ready() 而只剩下 _init() 可用

因为 _ready() 是由信号 NOTIFICATION_READY 触发的,而这个信号只在一个节点的所有子节点都收到 NOTIFICATION_READY 时才触发

而游戏运行时,这个节点的所有子节点已经收到了信号,因此该节点已经收到了信号 NOTIFICATION_READY,不会再次收到这个信号来触发新脚本中的 _ready()

还有一种情况是

Main.gd

extends Node

var a = A.new()

func _ready():
	print(get_children())

A.gd

extends Node

class_name A

func _init():
	print(get_children())

A.gd 中的 print(get_children()) 会打印 []

而 Main.gd 中的 print(get_children()) 会打印 Main.gd 所依附的节点的所有子节点,其中 new 出来的 A 不算是 Main.gd 所依附的节点的子节点

这就是一个很神奇的地方,new 出来的脚本不会像两个脚本共享一体那样,跟它的父脚本共享子节点,也不是一个独立的子节点