Godot 4.0 加载为占位符(InstancePlaceholder)的用法和特点
加载为占位符的功能设计上是用来辅助选择性加载场景的。比如一个很庞大的3D世界,玩家一时之间只会处在世界一小部分区域内,同时让整个地图驻留于内存是不现实的,此时需要选择性地灵活加载地图,使用Godot的"加载为占位符"功能可辅助这项工作的进行。
本人以开发2D游戏为主,发现此功能也可为我提供便利。
基本使用
-
编写脚本,在希望的时机实例化它
就像获取一般节点一样获取到此节点,然后调用其CreateInstance()
函数。C#需要将其转化为InstancePlaceholder
才可调用该函数。
//C# code
var node = GetNode("../TheNode");
var placeholderNode = node as InstancePlaceholder;
var target = placeholderNode.CreateInstance();
(启动游戏后,物体没有被立即加载)
(↓点击"加载"按钮后,物体被加载了)
效果与特点
在代码中像上文那样调用函数后,看上去物体已经被实例化了。
如何取得实例化出来的节点?
CreateInstance()
会返回实例化出来的节点。
反复实例化会怎样?
目标物体会被多次创建。
实例化后的物体替换了原有节点吗?
并没有。实例化后的节点是新的节点,实例化与作为占位符节点的节点是兄弟关系,
并且Godot会为节点取新的名字。
如果你时不时会移除、重新实例化此场景,这似乎是一个合适的设计。
值得注意的bug
节点保存为场景资源后,不要修改该资源的名称。
若进行了修改,原场景将无法找到该资源,并且设置为占用符的节点无法实例化,更糟的是你正在编辑的场景可能因为无法找到此依赖而无法保存,
按理来说Godot内部应该会维护资源名称的变更,但是这次它没有(我使用的版本v4.0.2.stable.mono.official [7a0977ce2],该问题存在。)
跟踪这个Issue以获得Bug修复进展
https://github.com/godotengine/godot/issues/37818
如果遇到了此问题,尝试改回原场景名,或用文本编辑器编辑场景文件(.tscn)使依赖恢复正常。
参考
https://docs.godotengine.org/en/stable/classes/class_instanceplaceholder.html
作者:qiiimiu
出处:https://www.cnblogs.com/qiiimiu/p/17383590.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通