Godot报错 Node not found: "SubViewport"[一问随笔]
问题:
使用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