插件的创建
本章将介绍创建插件的基本流程以及每个固定文件的作用。
关于插件
插件是用来扩展编辑器节点的好方法。它可以完全使用 IVRScript 和标准场景(scene)制作。你可以用它们做很多事情。
创建插件的基本流程
在开始前,先找个地方创建个空项目。这个空项目是制作和测试我们插件的基础。
编辑器要识别一个新的插件,需要两个文件: 一个是plugin.cfg
用于配置和具有此功能的工具脚本,一个是plugin.is
,用于插件节点的初始化和清除。插件在项目文件夹里面有一个标准路径,比如addons/plugin_name
。IdeaXR提供了创建插件的入口,用于生成这些文件并将它们放在需要的位置。
打开空项目后,点击左上方的工具->创建自定义插件,你会看到出现了一个对话框,类似这样:
- 插件名称、插件描述、作者、版本号支持中英文输入;
- 自定义节点类、文件夹名称仅支持英文输入;
- 创建前会检测节点类名是否与引擎自有类重名,如有重名则会提示:节点类型已存在,请重新命名
- 创建前会检测
addons
文件夹下是否已存在同名文件夹,如有重名则会提示:插件文件夹已存在,请重新命名
- 继承节点类:
- 输入框禁止手动输入,点击后方小按钮后弹出“新建Node窗口”选择继承的节点类型;
- 接入第三方SDK:
- 勾选后才出现后面的SDK类名,仅支持英文输入;
- 点击帮助按钮,会打开官网开发者文档-插件开发的相关页面;
你可以尝试在其中输入你自己定义的文本,如果怕出问题,可以先使用图中的输入:
输入完毕后点击新建即可,这样插件就创建完毕了。IdeaXR 会默认帮你创建一个继承自Spatial
的自定义节点,你可以在添加节点的页面搜索到:
默认插件模板定义
res://addons
下按创建插件时定义的文件夹名称生成新的插件文件夹:res://addons/[文件夹名称]
- 文件夹内包含5个默认文件:
- plugin.cfg
- plugin.is
- icon.svg
- [自定义节点类].is
- [自定义节点类].po
接下来依次介绍这五个文件的作用
plugin.cfg
该文件是根据设置面板上的信息所生成cfg
配置文件。在编辑器中不可见,仅能在外部打开,非必要不要轻易修改。
[plugin]
name="[插件名称]"
description="[插件描述]"
author="[作者]"
version="[版本号]"
script="plugin.is"
[translation]
po_path = "res://addons/[文件夹名称]/[自定义节点类].po"
括号里面的文本与创建插件时的设置对应。[plugin]
中指定的是插件的基本信息,[translation]
中指定的是翻译文件的路径。
plugin.is
该文件名称对应cfg
配置文件中的script字段,该脚本有两个要求你不能改变:它必须是一个tool
脚本,否则将无法在编辑器中正常加载;它必须继承EditorPlugin。有关于tool
关键字的介绍见 IVRScript基础语法-tool。
警告
除了这个 EditorPlugin 脚本之外,插件用到的其他 IVRScript 也必须是工具脚本。没有tool
的 IVRScript 在导入编辑器后都会像空文件一样!
处理好资源的初始化和清理是很重要的。一个好的做法是使用虚函数 _enter_tree()
来初始化你的插件,以及 _exit_tree()
来清理它。值得庆幸的是,IdeaXR 为你生成了这些回调。你的脚本应该看起来像这样:
tool
extends EditorPlugin
func _enter_tree():
add_custom_type("[自定义节点类]","[继承节点类型]",preload("res://addons/[文件夹名称]/[自定义节点类].is"),preload("res://addons/[文件夹名称]/icon.svg"))
pass
func _exit_tree():
remove_custom_type("[自定义节点类]")
pass
括号里面的文本与创建插件时的设置对应。如果后续你对插件中文件的名称或路径有修改,则需要同步修改该文件中对应路径和名称,否则由于找不到相关文件而导致报错。
icon.svg
该文件为创建插件节点时节点名称左侧的图标,你可将其改为自己设计的节点图标。如果节点名称则需要同步修改plugin.is
中对应的文件名称。
自定义节点类.is
有时你希望在许多节点中存在某种行为,例如可以重复使用的自定义场景或控件。实例化在很多情况下都很有用,但有时它会很麻烦,特别是如果你在许多项目中使用它。一个很好的解决方案是创建一个插件,添加一个具有自定义行为的节点。IdeaXR 在你创建插件时会为你生成默认的自定义节点类型脚本[自定义节点类].is
。根据“继承”属性选择的节点类型(默认继承Spatial
),新建插件功能的 is 脚本,默认以“插件名称”作为脚本名称。默认代码如下:
extends Spatial
func _ready():
pass
func _physics_process(delta):
pass
翻译文件
[自定义节点].po,该文件作为翻译文件,默认以“插件名称”作为文件名。默认有如下代码
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "English"
msgstr "中文翻译"
前四行为固定格式不能修改,用户可以在其之后添加需要翻译的单词句和翻译后的中文。具体方式为,在msgid
中添加英文,msgstr
中添加对应中文。一个单词或短语对应一组msgid
,msgstr
关键字。
正确:
msgid "property one"
msgstr "属性1"
msgid "property two"
msgstr "属性2"
错误:
msgid "property one","property two"
msgstr "属性1","属性2"