自定义导出器技术指南

有关为自定义资源类型编写导出器的程序员指南。

Windows
MacOS
Linux

本页面是从虚幻引擎3的文档转换而来,目前正在审阅中。信息可能已过时。

在编辑器中,UExporter类用于导出资源以供编辑器的拷贝/粘贴/复制功能使用,或者用于将资源导出到文件中。导出器的类声明导出器支持的对象类型,以及支持的导出格式列表。导出器支持文本或二进制。

UExporter的姊妹类是UFactory,它用于导入和粘贴资源以及创建新资源。请参阅编写自定义导入器 ,了解如何编写导入器的更多信息。

添加新的UExporter类

可以在游戏编辑器项目中定义UExporter派生的类型。请查阅在Editor/UnrealEd/Classes/Exporters中找到的类,了解与虚幻引擎4一起提供的UExporter派生类型示例。

需要注意的UExporter成员

下面是UFactory成员的列表,通常由其构造函数中的UExporter派生类型设置。

支持的类

说明该导出器导出的对象类型

格式扩展

该导出器支持的文件类型的文件扩展列表。例如,当将资源从编辑器导出到文件时,在文件对话框中用于向用户呈现。

格式描述

该导出器支持的类型描述列表。当将资源导出到文件时,在编辑器UI中向用户呈现。

最佳格式索引

进入最佳导出类型格式扩展阵列的索引。用于批量导出时自动选择输出格式。

bText

如果为_true,说明导出器可以通过ExportText将资源导出为文本。如果为_false,说明导出器只能通过ExportBinary导出为二进制。

二进制导出器示例

下面是一个用于将声音对象(USoundNodeWave)导出为.wav的简单导出器的实现示例。

/** 构造函数 */
USoundExporterWAV::USoundExporterWAV(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{
    // 用于保持一次性初始化的结构体
    struct FConstructorStatics
    {
        ConstructorHelpers::FClassFinder<UObject> Class0;
        FConstructorStatics()
            : Class0(TEXT("class'SoundNodeWave'"))
        {
        }
    };
    static FConstructorStatics ConstructorStatics;

    // 属性初始化
    SupportedClass = USoundNodeWave::StaticClass();
    bText = false;
    FormatDescription.Add(TEXT("Sound"));
    FormatExtension.Add(TEXT("WAV"));
}

/** 将声音数据以.wav格式导出到指定档案。*/
bool USoundExporterWAV::ExportBinary( UObject* Object,
                                        const TCHAR* Type,
                                        FArchive& Ar,
                                        FFeedbackContext* Warn,
                                        int32 FileIndex,
                                        uint32 PortFlags )
{
    USoundNodeWave* Sound = CastChecked<USoundNodeWave>( Object );

    // 导出声音数据,该数据已在内部/
    // 以.wav格式存储。
    void* RawWaveData = Sound->RawData.Lock( LOCK_READ_ONLY );
    Ar.Serialize( RawWaveData, Sound->RawData.GetBulkDataSize() );
    Sound->RawData.Unlock();
    return true;
}
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback