创建自定义地形导入器

通过插件新建地形导入格式的指南。

Windows
MacOS
Linux

可通过编写插件创建自定义导入地形数据的高度图和权重图格式。插件将把新格式添加到引擎,并从文件导入数据。

编写自定义导入器

  • 为新建导入器,插件应创建对象实例实现 ILandscapeHeightmapFileFormatILandscapeWeightmapFileFormat,并相应以 ILandscapeEditorModulemodule::RegisterHeightmapFileFormatILandscapeEditorModulemodule::RegisterWeightmapFileFormat 注册这些对象。

  • 在函数中实现 ILandscapeHeightmapFileFormat 接口需要覆盖以下函数:

    1. const FLandscapeFileTypeInfo& GetInfo() const:返回类型信息说明该类处理的文件类型,以及是否支持导出。

    2. FLandscapeHeightmapInfo Validate(const TCHAR* HeightmapFilename) const - 验证命名文件,或将其驳回并返回一个错误代码和消息。

    3. FLandscapeHeightmapImportData Import(const TCHAR* HeightmapFilename, FLandscapeFileResolution ExpectedResolution) const - 实际导入文件。

    4. void Export(const TCHAR* HeightmapFilename, TArrayView<const uint16> Data, FLandscapeFileResolution DataResolution, FVector Scale) const - 如该格式支持导出,则导出文件(查看来自 GetInfo 的返回值)。为进行编译,这是唯一一个不需要被覆盖的函数。然而,如它在未被覆盖的情况下覆盖,它将调用 check

    5. (Destructor) - 实现此接口的类应该使用虚拟析构函数,因为他们将通过指向接口类的指针进行删除。

  • 实现 ILandscapeHeightmapFileFormat 接口几乎相同,只在部分返回类型上有细微差别:

    1. const FLandscapeFileTypeInfo&amp; GetInfo() const - 返回类型信息说明该类处理的文件类型,以及是否支持导出。

    2. FLandscapeWeightmapInfo Validate(const TCHAR* WeightmapFilename) const - 验证命名文件,或将其驳回并返回一个错误代码和消息。

    3. FLandscapeWeightmapImportData Import(const TCHAR* WeightmapFilename, FLandscapeFileResolution ExpectedResolution) const - 实际导入文件。

    4. void Export(const TCHAR* WeightmapFilename, TArrayView<const uint16> Data, FLandscapeFileResolution DataResolution, FVector Scale) const - 如该格式支持导出,则导出文件(查看来自 GetInfo 的返回值)。为进行编译,这是唯一一个不需要被覆盖的函数。然而,如它在未被覆盖的情况下覆盖,它将调用 check

    5. (Destructor) - 实现此接口的类应该使用虚拟析构函数,因为他们将通过指向接口类的指针进行删除。

  • 可查看 LandscapeFileFormatInterfaces.h 中的接口、LandscapeFileFormatPng.cppLandscapeFileFormatPng.h 中的 .PNG 实现,以及 LandscapeFileFormatRaw.cppLandscapeFileFormatRaw.h 中的 .RAW 实现,了解更多信息和范例。所有代码均在引擎的 LandscapeEditor 模块中。

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