我来自Unity,在那里你可以使用ContextMenu方法属性。它将在编辑器中添加一个按钮,您可以单击该按钮,并且将调用脚本中的方法。
这对于测试/调试目的非常有帮助。当您正在测试某个功能并且想要一种简单的方法来触发它时。
Godot 中是否有类似的东西,或者我可以使用任何解决方法?
(这里是戈多3.5)
在编辑器中运行代码有多种方法。
\n事实上,Godot 游戏和 Godot 编辑器构建在同一核心之上。一种说法是 Godot 构建于 Godot\xe2\x80\xa6 之上,但更准确的说法是,您的游戏是没有编辑器的 Godot,加上您在其上构建的任何内容。
\n因此,在扩展 Godot 编辑器时您有很大的自由度。
\n首先,您将制作一个tool脚本。为此,您可以使用tool脚本文件顶部的关键字。这允许脚本在编辑器中运行。
警告:请记住,在 Godot 中,游戏不在编辑器内运行。脚本在编辑器中运行时移动的任何内容都将是对项目的修改,无论好坏。而且它不具有内置撤消功能。可以添加撤消功能(使用UndoRedo类),但这也是您必须编程的内容。
顺便说一句,您可能想知道您的代码是否在编辑器上运行。为此,您可以检查Engine.editor_hint在编辑器中检查哪个是正确的。
阅读有关在编辑器中运行代码一文的更多信息一文的更多信息。
\n由于tool脚本修改了项目。我下面介绍的内容更常用于设置部分场景或自动化部分开发工作流程。不用于测试功能。然而,由于链接文档有关ContextMenu它对于\xe2\x80\xa6 有用
\n\n自动从脚本设置场景数据
\n
我相信下面的内容并没有什么不妥之处。
\n话虽如此,编辑器的某些修改比其他修改更困难。我相信您并不真的想陷入向编辑器添加按钮(这是完全可能的)或向菜单添加选项(这也是可能的,但不是到处都是,至少不容易)的麻烦。相反,我将保留这个答案的简单选项:
\n你可以制作一个EditorScript. EditorScript这是一个扩展类并重写方法的脚本_run。例如:
tool\nextends EditorScript\n\nfunc _run():\n print("Hello from the Godot Editor!")\nRun Code Online (Sandbox Code Playgroud)\n要执行它,请在脚本编辑器中打开它,然后转到“文件”菜单,然后选择“运行”。您还可以在“脚本面板”(脚本编辑器左侧)上二次单击脚本,然后在上下文菜单中选择“运行”。
\n缺点是脚本在游戏中不起作用。它仅供编辑器使用。
\n尽管 Godot 3.x 没有对检查器操作的官方(有一个插件)支持(它可能会出现在 Godot 4 中),但我们可以解决这个问题。我们要做的是export一个bool属性,并处理(使用 setter,我们用 指定setget)设置它时会发生什么。像这样:
tool\nextends Node # or whatever\n\nexport var do_something:bool setget on_do_something\n\nfunc on_do_something(_mod_value:bool) -> void:\n # do whatever you want\n pass\nRun Code Online (Sandbox Code Playgroud)\n选择节点时,该属性应在检查器面板中显示为复选框。单击该复选框将触发 setter 方法on_do_something\xe2\x80\xa6 它将执行您想要它执行的任何操作。另请注意,我正在丢弃 Godot 尝试设置给属性 ( _mod_value) 的值,因此它将保留false。
这种模式在 Godot 开发人员中很受欢迎。
\n如果您想向 Godot UI 添加元素,您必须创建一个EditorPlugin(请参阅文档中的编辑器插件部分)。
好吧,但是,由于tool脚本可能会导致项目发生修改,这可能会成为测试的问题\xe2\x80\xa6 我们该如何进行测试呢?
好吧,我会提醒你,你可以告诉 Godot 执行特定的场景(它不必运行主场景),这是测试代码的另一种方法。
\n此外,当游戏运行时,您可以转到“场景”面板并选择“远程”选项卡来查看Node游戏中存在的s。这将允许您选择它们,这会在检查器中显示它们的属性,这将能够修改(对正在执行的游戏产生实时影响)。
\xe2\x80\xa6 因此,类似于我上面描述的使用 setter 的内容是可行的。除非它不需要tool关键字,因为它不会在编辑器中运行:
# No tool\nextends Node # or whatever\n\nexport var do_something:bool setget on_do_something\n\nfunc on_do_something(_mod_value:bool) -> void:\n # do whatever you want\n pass\nRun Code Online (Sandbox Code Playgroud)\n顺便说一句,在检查器中,当游戏正在执行并且您有相关的Node选择了相关项时,您将看到您的属性两次。第一个将触发设置器,而第二个则绕过它。因此,请注意您使用的是哪一种。
您可能还对“项目摄像机覆盖”功能感兴趣,该功能允许您从编辑器中自由移动游戏摄像机。您可以通过编辑器中的顶部栏访问该功能。
\n你还会发现可以Resource在编辑器中修改s并在游戏运行时实时查看效果。aScript是Resource\xe2\x80\xa6 但是,请从“调试器”面板暂停游戏(或使用 a breakpoint),并确保在修改之前您要修改的脚本没有被执行。
| 归档时间: |
|
| 查看次数: |
2149 次 |
| 最近记录: |