godot - 在编辑器中显示程序生成的对象
问题描述
我正在做一个项目,我正在根据 OpenSimplexNoise 对象在程序上从块中组装一个世界。这是通过在_ready
函数内添加子节点来完成的。它运行良好,生成的关卡可玩,但我想在不吃午饭的情况下预览它。有没有可能这样做?
解决方案
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。
推荐阅读
- php - 如何在 PHP 中拥有一个所有用户都可以访问的变量?
- c++ - 如何使用类模板删除样板代码?
- python - 执行外部命令提示符脚本的 Python 子进程,尝试通过传递文件位置来运行一个 .exe 文件
- java - 如何使用 JDBCTemplate 和 MapParameterSource 创建动态 SELECT 子句?
- python - 如何使用 xpath Python selenium 查找元素
- utf-8 - FusionAuth 电子邮件主题不支持特殊语言字符
- rabbitmq - 启用了联合插件的请求响应场景
- php - 如何在 woocommerce_checkout_create_order_line_item 中回显变量?
- php - Yii2 - Null 时忽略“或”条件
- php - 你如何使用中间件('auth:api')测试路由?