Godot报错‘Can't add child, already has parent’的解决咨询
解决Godot生成树木时出现“Can't add child TREE to Main3D, already has parent Main3D”的错误
错误原因
你的代码存在两个核心问题:
- 同一个
new_tree实例被反复添加到节点树中,Godot规定每个节点只能拥有一个父节点,重复添加必然触发报错。 _process(delta)是每一帧都会执行的函数,即便修复实例复用问题,也会持续生成远超tree_amount数量的树木。
修复后的代码
extends Spatial onready var tree_scene = preload("res://TREE.tscn") var tree_amount = 400 func _ready(): randomize() # 在_ready中一次性完成所有树木生成,避免重复执行 for _ in range(tree_amount): # 每次循环创建新的树木实例,确保节点独立性 var new_tree = tree_scene.instance() # 为每棵树生成随机位置 var random_pos = Vector3( rand_range(-200, 200), 0, rand_range(-200, 200) ) new_tree.global_translation = random_pos add_child(new_tree)
关键修改说明
- 将生成逻辑移至
_ready()函数,确保树木只生成一次,避免_process的重复触发。 - 在循环内部创建树木实例,保证每棵树都是独立节点,彻底解决“重复添加同一实例”的问题。
- 简化位置生成逻辑,直接构造随机
Vector3,移除不必要的全局变量。
内容的提问来源于stack exchange,提问作者AbsolutePickle42
相关产品推荐
相关产品推荐

