首页 > 解决方案 > 在编辑器中显示程序生成的对象

问题描述

我正在做一个项目,我正在根据 OpenSimplexNoise 对象在程序上从块中组装一个世界。这是通过在_ready函数内添加子节点来完成的。它运行良好,生成的关卡可玩,但我想在不吃午饭的情况下预览它。有没有可能这样做?

标签: godot

解决方案


tool您可以通过制作脚本在 Godot 编辑器中运行代码。

只需tool在脚本开头添加关键字,即可在编辑器上运行。


但是,您可能不希望每个函数或代码的每个部分都在编辑器上运行。您可以通过检查来检测您的代码是否在编辑器上运行Engine.editor_hint

因此,您可以在 a 的开头添加此代码func

    if Engine.editor_hint:
        return

这可以防止其余部分func在编辑器上运行。

或者做相反的事情:

    if not Engine.editor_hint:
        return

这可以防止其余部分func在编辑器之外运行。


您还需要注意代码对场景所做的更改……是对场景所做的更改。这包括添加节点和更改的属性。

对于添加的节点,您可能不需要任何特别注意,因为通常您不会设置owner节点的,因此这些节点不会与场景保持一致。

但是,您需要小心属性。如果您正在制作和插件,您可以将条目添加到撤消历史记录。


我想您会希望代码在您的OpenSimplexNoise更改时运行。所有Resource类型,例如OpenSimplexNoise具有"changed"可以连接的信号,并在信号更改时通知。对于制作自定义资源类型的人,请知道您需要从代码中手动发出信号。

而且,我想,您只想在编辑器中执行此操作。您将需要处理删除旧节点并添加新节点,或者有办法为新噪声重建它们。

您可以先将逻辑_ready移到另一个func. 然后_ready调用 that func,仅当代码未在编辑器中运行时。然后你可以将"changed"信号连接到那个新的func,所以它每次改变时都会运行。这也意味着它应该从清理代码开始。


顺便说一句,我这里描述的也是制作插件的基础。所以我会鼓励你研究一下。例如,可以扩展编辑器的 UI。


推荐阅读