Godot报错 Node not found: "SubViewport"[一问随笔]
阅读原文时间:2023年07月16日阅读:1

问题:

使用TextureRect显示SubViewport的内容,结果发生了如下报错

E 0:00:01:0007   get_node: Node not found: "SubViewport" (relative to "Node2D").
  <C++ 错误>       Method/function failed. Returning: nullptr
  <C++ 源文件>      scene/main/node.cpp:1364 @ get_node()

E 0:00:01:0007   setup_local_to_scene: ViewportTexture: Path to node is invalid.
  <C++ 错误>       Condition "!vpn" is true.
  <C++ 源文件>      scene/main/viewport.cpp:76 @ setup_local_to_scene()

解决:

可以不用处理,这不影响使用。但是也有办法解决。

方法1:改变节点顺序。

使TextureRect节点在场景中的排序位于SubViewport节点之后。

缺点:这样似乎会引发不同的报错。

方法2:使用脚本设置TextureRect的参数

_Ready()中使用代码设置TextureRect的Texture属性为指定的ViewportTexture。

这样可以避免任何报错。

public partial class MyViewRect : TextureRect
{
    [Export]
    public SubViewport subViewport;

    public override void _Ready()
    {
        if (subViewport != null)
        {
            Texture = subViewport.GetTexture();
        }
    }
}

缺点:在可视化编辑器中无法方便地看到TextureRect的内容。

参考:

https://www.reddit.com/r/godot/comments/11s516p/comment/jccaoy5/

https://www.reddit.com/r/godot/comments/11s3m06/get_node_node_not_found_error_but_code_still/

https://github.com/godotengine/godot/issues/16067