跳到主要内容

制作自定义节点插件

有时您希望在许多节点中存在某种行为,例如可以重复使用的自定义场景或控件。实例化在很多情况下都很有用,但有时它会很麻烦,特别是如果您在许多项目中使用它。一个很好的解决方案是创建一个插件,添加一个具有自定义行为的节点。

要创建一个新的节点类型,你可以使用来自 EditorPlugin 类的 add_custom_type() 这个函数。这个函数可以向编辑器添加新的类型(节点或资源)。但是,在你创建类型之前,需要一个脚本,作为类型的逻辑,虽然该脚本不一定要使用 tool 关键字,但可以添加它,以便脚本在编辑器中运行。

在本教程中,我们会制作一个简单的按钮插件,在点击时打印出一条信息。对此,我们需要一个从 Button 扩展的简单脚本。如果你愿意,它也可以扩展BaseButton。首先,让我们先创建一个插件:

create_custom_button

插件创建成功后,IdeaXR 会帮你打开my_button_node.is脚本,在这里面你可以编写你的自定义按钮逻辑。将其中的代码进行修改:

tool
extends Button


func _enter_tree():
connect("pressed", self, "clicked")


func clicked():
print("You clicked me!")

这就是我们的基本按钮了。你可以通过添加新节点来尝试:

add_custom_button

当你添加节点时,你可以看到它已经有你创建的脚本附加在上面。给这个按钮设置一个文本并调整大小,保存并运行场景。当你点击按钮时,你可以在输出窗口中看到一些文字:

output_log

到这里这个插件就制作完毕了,是不是发现我们还没有说到add_custom_type()这个函数?这是由于IdeaXR 已经帮你把相关脚本和代码设置好了,我们找到addons->my_button->plugin.is,你可以看到,其中使用的add_custom_type()remove_custom_type():

tool
extends EditorPlugin


func _enter_tree():
# 插件在这里初始化
# 添加带有名称、父类型、脚本和图标的新类型
add_custom_type("my_button_node","Button", preload("res://addons/my_button/my_button_node.is"), preload("res://addons/my_button/icon.svg"))
pass


func _exit_tree():
# 插件在这里清理
# 记得在停用时将其从引擎中移除。
remove_custom_type("my_button_node")
pass

该脚本必须继承EditorPlugin类。有关EditorPlugin类中的方法可参考脚本编辑器中的搜索帮助editorplugin