You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot中如何通过C#代码设置资源自定义导入参数?

Godot自定义导入插件设置导入参数方案

核心思路

通过重写EditorImportPlugin的两个关键方法,实现自定义导入参数的定义与应用:

  1. _get_import_options():定义需要的导入参数(如压缩模式、通道打包)
  2. _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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 18:37:33