Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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 исходных данных.