在编辑器中运行代码¶
什么是 tool
?¶
tool
是一行功能强大的代码,当它添加到脚本顶部时,会使它在编辑器中执行。您还可以决定脚本的哪些部分在编辑器中执行,哪些部分在游戏中执行,哪些部分在两者中执行。
你可以用它来做很多事情,但是它在层次设计中非常有用,可以直观地呈现那些难以预测的事情。以下是一些用例:
如果你有一门大炮可以发射受物理(重力)影响的炮弹,你可以在编辑器中绘制炮弹的轨迹,使水平设计更容易。
如果你有不同跳跃高度的跳板,你可以画出一个玩家跳到一个跳板上时所能达到的最大跳跃高度,也使得水平设计更容易。
如果玩家不使用sprite,而是使用代码绘制自己,则可以在编辑器中执行该绘制代码以查看玩家。
如何使用它¶
要将脚本转换为工具,请添加 tool
代码顶部的关键字。
要检查当前是否在编辑器中,请使用: Engine.editor_hint
.
例如,如果您只想在编辑器中执行一些代码,请使用:
if Engine.editor_hint:
# Code to execute when in editor.
另一方面,如果只想在游戏中执行代码,只需取消前面的表达式:
if not Engine.editor_hint:
# Code to execute when in game.
没有上述两个条件的代码片段将在编辑器和游戏中运行。
以下是如何 _process()
函数可能看起来像您:
func _process(delta):
if Engine.editor_hint:
# Code to execute in editor.
if not Engine.editor_hint:
# Code to execute in game.
# Code to execute both in editor and in game.
注解
编辑器中的修改是永久性的。在我们的例子中,当我们移除脚本时,节点将保持其旋转方向。注意不要做不必要的修改。
试试看吧¶
添加 Sprite
节点到场景并将纹理设置为Godot图标。附加并打开脚本,然后将其更改为:
tool
extends Sprite
func _process(delta):
rotation_degrees += 180 * delta
保存脚本并返回编辑器。现在应该可以看到对象旋转了。如果你运行游戏,它也会旋转。
注解
如果看不到更改,请重新加载场景(关闭并再次打开)。
现在让我们选择在什么时候运行代码。修改您的 _process()
函数如下:
func _process(delta):
if Engine.editor_hint:
rotation_degrees += 180 * delta
else:
rotation_degrees -= 180 * delta
保存脚本。现在,对象将在编辑器中顺时针旋转,但是如果你运行游戏,它将逆时针旋转。
注解
其他节点的代码不会在编辑器中运行。您对其他节点的访问受到限制。可以访问树和节点及其默认属性,但不能访问用户变量。如果要这样做,其他节点也必须在编辑器中运行。在编辑器中根本无法访问自动加载节点。
警告
使用 tool
不正确会产生许多错误。建议您先根据需要编写代码,然后再添加 tool
关键字到顶部。还要确保将代码分成在编辑器中运行的部分和在游戏中运行的部分。这样你可以更容易地发现你的错误。