EditorImportPlugin
Наследует: ResourceImporter < RefCounted < Object
Регистрирует пользовательский импортер ресурсов в редакторе. Используйте класс для разбора любого файла и импорта его как нового типа ресурса.
Описание
EditorImportPlugin-ы предоставляют способ расширить функциональность импорта ресурсов редактора. Используйте их для импорта ресурсов из пользовательских файлов или для предоставления альтернатив существующим импортерам редактора.
EditorImportPlugins работают, связываясь с определенными расширениями файлов и типом ресурса. См. _get_recognized_extensions() и _get_resource_type(). Они могут опционально указывать некоторые предустановки импорта, которые влияют на процесс импорта. EditorImportPlugins отвечают за создание ресурсов и сохранение их в каталоге .godot/imported (см. ProjectSettings.application/config/use_hidden_project_data_directory).
Ниже приведен пример EditorImportPlugin, который импортирует Mesh из файла с расширением ".special" или ".spec":
@tool
extends EditorImportPlugin
func _get_importer_name():
return "my.special.plugin"
func _get_visible_name():
return "Special Mesh"
func _get_recognized_extensions():
return ["special", "spec"]
func _get_save_extension():
return "mesh"
func _get_resource_type():
return "Mesh"
func _get_preset_count():
return 1
func _get_preset_name(preset_index):
return "Default"
func _get_import_options(path, preset_index):
return [{"name": "my_option", "default_value": false}]
func _import(source_file, save_path, options, platform_variants, gen_files):
var file = FileAccess.open(source_file, FileAccess.READ)
if file == null:
return FAILED
var mesh = ArrayMesh.new()
# Заполните сетку данными, считанными из «файла», оставленного в качестве упражнения для читателя.
var filename = save_path + "." + _get_save_extension()
return ResourceSaver.save(mesh, filename)
using Godot;
public partial class MySpecialPlugin : EditorImportPlugin
{
public override string _GetImporterName()
{
return "my.special.plugin";
}
public override string _GetVisibleName()
{
return "Special Mesh";
}
public override string[] _GetRecognizedExtensions()
{
return ["special", "spec"];
}
public override string _GetSaveExtension()
{
return "mesh";
}
public override string _GetResourceType()
{
return "Mesh";
}
public override int _GetPresetCount()
{
return 1;
}
public override string _GetPresetName(int presetIndex)
{
return "Default";
}
public override Godot.Collections.Array<Godot.Collections.Dictionary> _GetImportOptions(string path, int presetIndex)
{
return
[
new Godot.Collections.Dictionary
{
{ "name", "myOption" },
{ "default_value", false },
},
];
}
public override Error _Import(string sourceFile, string savePath, Godot.Collections.Dictionary options, Godot.Collections.Array<string> platformVariants, Godot.Collections.Array<string> genFiles)
{
using var file = FileAccess.Open(sourceFile, FileAccess.ModeFlags.Read);
if (file.GetError() != Error.Ok)
{
return Error.Failed;
}
var mesh = new ArrayMesh();
// Заполните сетку данными, считанными из «файла», оставленного в качестве упражнения для читателя.
string filename = $"{savePath}.{_GetSaveExtension()}";
return ResourceSaver.Save(mesh, filename);
}
}
Чтобы использовать EditorImportPlugin, сначала зарегистрируйте его с помощью метода EditorPlugin.add_import_plugin().
Обучающие материалы
Методы
_can_import_threaded() virtual const |
|
_get_format_version() virtual const |
|
_get_import_options(path: String, preset_index: int) virtual required const |
|
_get_import_order() virtual const |
|
_get_importer_name() virtual required const |
|
_get_option_visibility(path: String, option_name: StringName, options: Dictionary) virtual const |
|
_get_preset_count() virtual const |
|
_get_preset_name(preset_index: int) virtual required const |
|
_get_priority() virtual const |
|
_get_recognized_extensions() virtual required const |
|
_get_resource_type() virtual required const |
|
_get_save_extension() virtual required const |
|
_get_visible_name() virtual required const |
|
_import(source_file: String, save_path: String, options: Dictionary, platform_variants: Array[String], gen_files: Array[String]) virtual required const |
|
append_import_external_resource(path: String, custom_options: Dictionary = {}, custom_importer: String = "", generator_parameters: Variant = null) |
Описания метода
bool _can_import_threaded() virtual const 🔗
Указывает, может ли этот импортер выполняться параллельно в потоках, или, наоборот, редактору безопасно вызывать его только из основного потока, для одного файла за раз.
Если реализация этого импортера потокобезопасна и может выполняться параллельно, переопределите это значение на true, чтобы оптимизировать параллельное выполнение.
Если не переопределено, возвращает false.
int _get_format_version() virtual const 🔗
Получает версию формата этого импортера. Увеличивайте эту версию при внесении несовместимых изменений в формат импортируемых ресурсов.
Если не переопределено, версия формата равна 0.
Array[Dictionary] _get_import_options(path: String, preset_index: int) virtual required const 🔗
Получает параметры и значения по умолчанию для предустановки по этому индексу. Возвращает массив словарей со следующими ключами: name, default_value, property_hint (необязательно), hint_string (необязательно), usage (необязательно).
int _get_import_order() virtual const 🔗
Получает порядок этого импортера, который будет запущен при импорте ресурсов. Импортеры с более низким порядком импорта будут вызваны первыми, а более высокие значения будут вызваны позже. Используйте это, чтобы гарантировать запуск импортера после того, как зависимости уже импортированы. Порядок импорта по умолчанию — 0, если он не переопределен определенным импортером. См. ImportOrder для некоторых предопределенных значений.
String _get_importer_name() virtual required const 🔗
Получает уникальное имя импортера.
bool _get_option_visibility(path: String, option_name: StringName, options: Dictionary) virtual const 🔗
Определяет, должен ли параметр импорта, заданный параметром option_name, быть видимым в панели импорта. Реализация по умолчанию всегда возвращает true, делая все параметры видимыми. Это в основном полезно для скрытия параметров, зависящих от других, если один из них отключен.
func _get_option_visibility(path, option_name, options):
# Показывать настройку качества с потерями только в том случае, если режим сжатия установлен на "Lossy".
if option_name == "compress/lossy_quality" and options.has("compress/mode"):
return int(options["compress/mode"]) == COMPRESS_LOSSY # Это константа, которую вы устанавливаете
return true
public override bool _GetOptionVisibility(string path, StringName optionName, Godot.Collections.Dictionary options)
{
// Показывать настройку качества с потерями только в том случае, если режим сжатия установлен на "Lossy".
if (optionName == "compress/lossy_quality" && options.ContainsKey("compress/mode"))
{
return (int)options["compress/mode"] == CompressLossy; // Это константа, которую вы устанавливаете
}
return true;
}
int _get_preset_count() virtual const 🔗
Получает количество начальных предустановок, определенных плагином. Используйте _get_import_options(), чтобы получить параметры по умолчанию для предустановки, и _get_preset_name(), чтобы получить имя предустановки.
По умолчанию предустановок нет.
String _get_preset_name(preset_index: int) virtual required const 🔗
Получает имя предустановленных параметров по данному индексу.
float _get_priority() virtual const 🔗
Получает приоритет этого плагина для распознанного расширения. Плагины с более высоким приоритетом будут иметь приоритет. Приоритет по умолчанию — 1.0.
PackedStringArray _get_recognized_extensions() virtual required const 🔗
Получает список расширений файлов, которые необходимо связать с этим загрузчиком (без учета регистра). Например, ["obj"].
String _get_resource_type() virtual required const 🔗
Получает тип ресурса Godot, связанный с этим загрузчиком. Например, "Mesh" или "Animation".
String _get_save_extension() virtual required const 🔗
Получает расширение, используемое для сохранения этого ресурса в каталоге .godot/imported (см. ProjectSettings.application/config/use_hidden_project_data_directory).
String _get_visible_name() virtual required const 🔗
Получает имя для отображения в окне импорта. Вы должны выбрать это имя как продолжение "Импортировать как", например, "Импортировать как специальную сетку".
Error _import(source_file: String, save_path: String, options: Dictionary, platform_variants: Array[String], gen_files: Array[String]) virtual required const 🔗
Импортирует source_file с указанным импортом options. Должен возвращать @GlobalScope.OK, если импорт выполнен успешно, другие значения указывают на сбой.
Импортированный ресурс должен быть сохранен в save_path + "." + _get_save_extension(). Если для тега feature предпочтителен другой вариант, сохраните вариант в save_path + "." + tag + "." + _get_save_extension() и добавьте тег feature в platform_variants.
Если в файловой системе ресурсов (res://) генерируются дополнительные файлы ресурсов, добавьте их полный путь в gen_files, чтобы редактор знал, что они зависят от source_file.
Этот метод необходимо переопределить для выполнения фактической работы по импорту. Пример переопределения этого метода см. в описании этого класса.
Error append_import_external_resource(path: String, custom_options: Dictionary = {}, custom_importer: String = "", generator_parameters: Variant = null) 🔗
Эту функцию можно вызвать только во время обратного вызова _import(), и она позволяет вручную импортировать из нее ресурсы. Это полезно, когда импортируемый файл генерирует внешние ресурсы, требующие импорта (например, изображения). Пользовательские параметры для файла ".import" можно передать через custom_options. Кроме того, в случаях, когда несколько импортеров могут обрабатывать файл, можно указать custom_importer, чтобы принудительно выбрать определенный. Эта функция выполняет импорт ресурсов и немедленно возвращает код успеха или ошибки. generator_parameters определяет необязательные дополнительные метаданные, которые будут сохранены как generator_parameters в разделе remap файла .import, например, для хранения хэша md5 исходных данных.