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
在編輯器中註冊一個自訂資源匯入器。使用該類來解析任何檔,並將其作為新的資源型別匯入。
說明
EditorImportPlugins provide a way to extend the editor's resource import functionality. Use them to import resources from custom files or to provide alternatives to the editor's existing importers.
EditorImportPlugins work by associating with specific file extensions and a resource type. See _get_recognized_extensions() and _get_resource_type(). They may optionally specify some import presets that affect the import process. EditorImportPlugins are responsible for creating the resources and saving them in the .godot/imported directory (see ProjectSettings.application/config/use_hidden_project_data_directory).
Below is an example EditorImportPlugin that imports a Mesh from a file with the extension ".special" or ".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()
# Fill the Mesh with data read in "file", left as an exercise to the reader.
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();
// Fill the Mesh with data read in "file", left as an exercise to the reader.
string filename = $"{savePath}.{_GetSaveExtension()}";
return ResourceSaver.Save(mesh, filename);
}
}
To use EditorImportPlugin, register it using the EditorPlugin.add_import_plugin() method first.
教學
方法
_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 🔗
Tells whether this importer can be run in parallel on threads, or, on the contrary, it's only safe for the editor to call it from the main thread, for one file at a time.
If this importer's implementation is thread-safe and can be run in parallel, override this with true to optimize for concurrency.
If not overridden, returns false.
int _get_format_version() virtual const 🔗
Gets the format version of this importer. Increment this version when making incompatible changes to the format of the imported resources.
If not overridden, the format version is 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 🔗
Gets whether the import option specified by option_name should be visible in the Import dock. The default implementation always returns true, making all options visible. This is mainly useful for hiding options that depend on others if one of them is disabled.
func _get_option_visibility(path, option_name, options):
# Only show the lossy quality setting if the compression mode is set to "Lossy".
if option_name == "compress/lossy_quality" and options.has("compress/mode"):
return int(options["compress/mode"]) == COMPRESS_LOSSY # This is a constant that you set
return true
public override bool _GetOptionVisibility(string path, StringName optionName, Godot.Collections.Dictionary options)
{
// Only show the lossy quality setting if the compression mode is set to "Lossy".
if (optionName == "compress/lossy_quality" && options.ContainsKey("compress/mode"))
{
return (int)options["compress/mode"] == CompressLossy; // This is a constant you set
}
return true;
}
int _get_preset_count() virtual const 🔗
Gets the number of initial presets defined by the plugin. Use _get_import_options() to get the default options for the preset and _get_preset_name() to get the name of the preset.
By default, there are no presets.
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 🔗
獲取在匯入視窗中顯示的名稱。你應該選擇這個名字作為“匯入為”的延續,例如“匯入為 Special Mesh”。
Error _import(source_file: String, save_path: String, options: Dictionary, platform_variants: Array[String], gen_files: Array[String]) virtual required const 🔗
Imports source_file with the import options specified. Should return @GlobalScope.OK if the import is successful, other values indicate failure.
The imported resource is expected to be saved to save_path + "." + _get_save_extension(). If a different variant is preferred for a feature tag, save the variant to save_path + "." + tag + "." + _get_save_extension() and add the feature tag to platform_variants.
If additional resource files are generated in the resource filesystem (res://), add their full path to gen_files so that the editor knows they depend on source_file.
This method must be overridden to do the actual importing work. See this class' description for an example of overriding this method.
Error append_import_external_resource(path: String, custom_options: Dictionary = {}, custom_importer: String = "", generator_parameters: Variant = null) 🔗
This function can only be called during the _import() callback and it allows manually importing resources from it. This is useful when the imported file generates external resources that require importing (as example, images). Custom parameters for the ".import" file can be passed via the custom_options. Additionally, in cases where multiple importers can handle a file, the custom_importer can be specified to force a specific one. This function performs a resource import and returns immediately with a success or error code. generator_parameters defines optional extra metadata which will be stored as generator_parameters in the remap section of the .import file, for example to store a md5 hash of the source data.