码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Godot 4.0 加载为占位符(InstancePlaceholder)的用法和特点


    加载为占位符的功能设计上是用来辅助选择性加载场景的。比如一个很庞大的3D世界,玩家一时之间只会处在世界一小部分区域内,同时让整个地图驻留于内存是不现实的,此时需要选择性地灵活加载地图,使用Godot的"加载为占位符"功能可辅助这项工作的进行。
    本人以开发2D游戏为主,发现此功能也可为我提供便利。

    基本使用

    1. 将节点保存为场景。
      把希望动态加载的每个节点拖入"文件系统"对话框中,这将使场景被储存起来成为资源。
      image


    2. 加载为占位符。
      右键场景中刚刚操作的节点,勾选"加载为占位符"
      image


    3. 编写脚本,在希望的时机实例化它
      就像获取一般节点一样获取到此节点,然后调用其CreateInstance()函数。C#需要将其转化为InstancePlaceholder才可调用该函数。

    //C# code
    var node = GetNode("../TheNode");
    var placeholderNode = node as InstancePlaceholder;
    var target = placeholderNode.CreateInstance();
    

    (启动游戏后,物体没有被立即加载)
    image


    (↓点击"加载"按钮后,物体被加载了)
    image



    效果与特点

    在代码中像上文那样调用函数后,看上去物体已经被实例化了。

    如何取得实例化出来的节点?

    CreateInstance()会返回实例化出来的节点。

    反复实例化会怎样?

    目标物体会被多次创建。

    image

    实例化后的物体替换了原有节点吗?

    并没有。实例化后的节点是新的节点,实例化与作为占位符节点的节点是兄弟关系,

    并且Godot会为节点取新的名字。

    如果多次实例化,取的名字中带有的序号会递增。
    image


    如果你时不时会移除、重新实例化此场景,这似乎是一个合适的设计。

    值得注意的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

  • 相关阅读:
    【MongoDB】索引 - 数组字段的多键索引
    选择合适的 MQTT 云服务:一文了解 EMQX Cloud Serverless、Dedicated 与 BYOC 版本
    R语言计算代码的运行时间:使用tictoc包计算代码的运行时间长短、将toc的结果赋值值变量、可以获取详细信息(开始时间、结束时间、tic内容等)
    安全渗透测试基础知识之网络基础知识
    网络安全(黑客)自学
    PHP 使用 PhpSpreadsheet
    让reviewdog支持gitlab-push-commit,守住代码质量下限
    你绝对不知道的JMeter中如何实现接口之间的关联?
    nginx的location的 优先级和匹配方式
    低代码开发平台告诉您金融行业的管理系统可以做哪些模块
  • 原文地址:https://www.cnblogs.com/qiiimiu/p/17383590.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号