You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:48:23