Godot中如何通过C#代码设置资源自定义导入参数?
Godot自定义导入插件设置导入参数方案
核心思路
通过重写EditorImportPlugin的两个关键方法,实现自定义导入参数的定义与应用:
_get_import_options():定义需要的导入参数(如压缩模式、通道打包)_import():读取参数值并应用到资源导入逻辑中
1. 定义自定义导入参数
在_get_import_options()方法中,使用add_option()添加各类参数,支持枚举、数值、布尔等类型。以下是纹理导入相关参数的示例:
extends EditorImportPlugin func _get_import_options(): # 压缩模式枚举参数 add_option( "compress_mode", PROPERTY_TYPE_ENUM, 0, # 默认值(Uncompressed) "Compression Mode", "Choose texture compression type", ["Uncompressed", "VRAM Compressed", "Lossy Compressed"] ) # 通道打包枚举参数 add_option( "channel_pack", PROPERTY_TYPE_ENUM, 0, # 默认值(Optimised) "Channel Packing", "Select channel packing strategy", ["Optimised", "RGB Friendly"] ) # 压缩质量数值参数(0-100) add_option( "compress_quality", PROPERTY_TYPE_INT, 80, "Compression Quality", "Adjust lossy compression quality", 0, # 最小值 100 # 最大值 )
2. 在导入逻辑中应用参数
在_import()方法里,通过options字典读取用户设置的参数值,对应处理资源:
func _import(source_file, save_path, options, r_platform_variants, r_gen_files): # 读取参数 var compress_mode = options["compress_mode"] var channel_pack = options["channel_pack"] var compress_quality = options["compress_quality"] # 加载源图像 var image = Image.load(source_file) if not image: return FAILED # 处理通道打包 match channel_pack: 0: # Optimised模式:转换为高效格式 if image.get_format() == Image.FORMAT_RGBA8: image.convert(Image.FORMAT_RGBA4444) 1: # RGB Friendly模式:确保RGB格式 if image.get_format() == Image.FORMAT_GRAYSCALE: image.convert(Image.FORMAT_RGB8) # 处理压缩模式 var texture = ImageTexture.new() match compress_mode: 0: # 不压缩 texture.load_from_image(image) 1: # VRAM压缩(根据平台自动适配) texture.load_from_image(image, ImageTexture.FLAG_COMPRESS_S3TC) 2: # 有损压缩 var compressed_img = image.compress(Image.COMPRESS_LOSSY, compress_quality) texture.load_from_image(compressed_img) # 保存最终资源 return ResourceSaver.save(save_path + ".res", texture)
3. 复用官方导入器参数(可选)
如果需要和官方ResourceImporterTexture的参数保持一致,可以参考Godot源码中该类的_get_import_options()实现,直接复用参数名(如"compress/mode")和枚举值,降低用户学习成本。
内容的提问来源于stack exchange,提问作者lovesuper
相关产品推荐
相关产品推荐

