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

Godot递归遍历节点树:短版本函数返回null的原因排查

为什么Godot中递归查找节点的简化函数返回null?

我在Godot Engine v4.0.2.stable中写了一个递归查找节点的函数,最初用全局变量temp存储找到的节点,这个版本能正常工作:

func find_node_in_tree(parent_node_ref, target_node_name):
    for node in parent_node_ref.get_children():
        if temp != null:
            break
        if node.name == target_node_name:
            temp = node
            break
        else:
            if node.get_child_count() > 0:
                find_node_in_tree(node, target_node_name)
    return temp

但改成简化版后,函数始终返回null——调试时明明看到递归分支里已经return了目标节点,但主函数就是拿不到结果:

func find_node_in_tree(parent_node_ref, target_node_name):
    for node in parent_node_ref.get_children():
        if node.name == target_node_name:
            return node
        else:
            if node.get_child_count() > 0:
                find_node_in_tree(node, target_node_name)

问题原因

简化版的核心问题是递归调用的返回值没有被处理。当递归进入子节点找到目标后,虽然当前递归分支返回了节点,但上层调用的函数只是执行了find_node_in_tree(node, target_node_name),没有接收这个返回值并继续向上传递。当循环遍历完所有子节点都没在当前层找到目标时,函数就会默认返回null,导致递归找到的结果丢失。

修复后的正确代码

只需要在递归调用时接收返回值,若结果不为null就直接返回,让结果逐层向上传递:

func find_node_in_tree(parent_node_ref, target_node_name):
    for node in parent_node_ref.get_children():
        if node.name == target_node_name:
            return node
        else:
            if node.get_child_count() > 0:
                var result = find_node_in_tree(node, target_node_name)
                if result != null:
                    return result
    return null

这样当递归分支找到目标节点时,结果会沿着调用链逐层返回,最终主函数就能拿到正确的节点引用。

内容的提问来源于stack exchange,提问作者DotFX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:42:34