资源元数据

介绍如何在虚幻引擎资源上创建、读取和修改元数据。

Windows
MacOS
Linux

asset-metadata-banner.png

您可以将元数据指定给您的虚幻引擎项目中的任何资源,以记录稍后可能需要使用的特定资源的信息。此元数据是一组键值对,您可以根据自己的目的自由定义。

例如,元数据可以包括资源创建者姓名、资源在您的项目中的预期用途,或者资源在您团队的工作流程中的状态(例如正在进行、已完成、已批准等)等等内容。

设置好后,您可以使用此元数据帮助过滤内容浏览器中的资源,或者识别在虚幻编辑器中运行的蓝图或Python脚本中的资源。

因为此元数据已指定给您的项目中的资源,所以不能在运行时游戏代码中直接访问它。它主要用于在虚幻编辑器中编写资源管理操作脚本。

您还可以将在某些第三方应用程序中创建的元数据连同您的资源导入到虚幻编辑器中。有关如何通过FBX导入过程将元数据导入虚幻引擎的详细信息,请参阅FBX资源元数据管道

在虚幻编辑器UI中使用元数据

虽然目前无法在UI虚幻编辑器中修改元数据,但可以查看附加到任何资源的元数据,并且可以使用元数据键过滤内容浏览器中显示的资源。

查看资源上的元数据

要查看分配给任何资源的元数据,请在内容浏览器中右键单击该资源,并选择 资源操作(Asset Actions)> 显示元数据(Show Metadata)

Show Metadata in Unreal

您将看到一个附加到该资源的所有键和值的列表:

View Metadata on Assets

过滤内容浏览器

要在内容浏览器中按特定的元数据标签过滤资源,请执行以下操作:

  1. 从主菜单中选择 编辑(Edit)> 项目设置(Project Settings),从而打开 项目设置(Project Settings) 窗口。

  2. 选择 游戏(Game)> 资源管理器(Asset Manager) 部分,然后找到 资源注册表(Asset Registry)> 资源注册元数据标签(Metadata Tags For Asset Registry) 设置。
    将您希望能够被用于过滤资源的所有键的名称添加到此列表中。

    单击显示全图。

  3. 在内容浏览器的 过滤(Filters) 栏中,键入标签名称,后跟=,再后跟要搜索的值。资源列表将自动进行过滤,仅显示包含您指定的元数据标签的资源,对于这些资源,该标签的值与您在=后面键入的值匹配。
    Filter the Content Browser by metadata

使用资源元数据

如果您还没有安装 编辑器脚本工具(Editor Scripting Utilities) 插件,则需要安装该插件。有关详情,请参阅脚本化和自动化编辑器

选择实现方法:

Blueprints

Python

您将在 编辑器脚本(Editor Scripting)> 元数据(Metadata) 类别下找到管理资源元数据所需的节点。

要使用这些节点,您的蓝图类必须派生自仅编辑器类,例如 PlacedEditorUtilityBase 类。有关详情,请参阅使用蓝图脚本化编辑器

  • 在使用元数据之前,必须先加载要使用的资源。您可以使用 Editor Scripting > Load Asset 节点来实现这一点。如果设置或移除元数据值,想要保留做出的更改,后面还需要使用 Save AssetSave Loaded Asset 等节点。

从资源获取元数据

  • 如果您知道要检索的元数据键的名称,可以使用 Get Metadata Tag 节点。例如,该脚本根据名称检索单个标签的值,并将其输出到视口:

    单击显示全图。

  • 还可以使用 Get Metadata Tag Values 节点检索所有元数据,将所有元数据作为标签-值对的 映射。例如,该脚本检索一个资源的所有元数据,并按顺序将每个键和每个值写入视口:

    设置新的元数据标签

使用 Set Metadata Tag 节点。例如:

单击显示全图。

如果您指定的标签名称在资源的元数据中还不存在,则使用您指定的值添加此名称。如果资源已经具有指定名称的标签,则更新此标签的值。

移除现有元数据

使用 Remove Metadata Tag 节点,并提供想要移除的标签名称。例如:

单击显示全图。

如果想要从资源中移除 所有 元数据标签,可以循环调用此节点:

单击显示全图。

您将在unreal.EditorAssetLibrary类中找到管理元数据所需的函数。

  • 在使用元数据之前,必须先加载要使用的资源。您可以使用unreal.EditorAssetLibrary.load_asset()根据资源在项目内容中的文件名添加资源。如果设置或移除元数据值,想要保留做出的更改,后面还需要使用unreal.EditorAssetLibrary.save_asset()unreal.EditorAssetLibrary.save_loaded_asset()之类的函数。

从资源获取元数据

  • 如果您知道要检索的元数据键的名称,可以使用get_metadata_tag(asset, tag_name)函数。例如,该脚本根据名称检索单个标签的值,并将其输出到日志:

    import unreal
    asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10"
    tag_name = "CreatedBy"
    loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
    value = unreal.EditorAssetLibrary.get_metadata_tag(loaded_asset, tag_name)
    if not value is "":
        unreal.log("Value of tag " + tag_name + " for asset " + asset_name + ": " + value)
  • 您还可以使用get_metadata_tag_values(asset)函数来检索分配给资源的所有元数据,将所有元数据作为一个字典。然后,您可以循环遍历这些键和值。例如,该脚本检索一个资源的所有元数据,并按顺序将每个键和每个值写入日志:请注意,此词典中的键实际上不是字符串,而是unreal.Name对象。您可以使用内置的str()函数将这些对象强制转换为字符串。

    import unreal
    asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10"
    loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
    all_metadata = unreal.EditorAssetLibrary.get_metadata_tag_values(loaded_asset)
    for tag_name, value in all_metadata.iteritems():
        if not value is "":
            unreal.log("Value of tag " + str(tag_name) + " for asset " + asset_name + ": " + value)

设置新的元数据标签

使用set_metadata_tag(asset, tag_name, value)函数。例如:

import unreal
asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10"
tag_name = "CreatedBy"
value_to_set = "My Name"
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
unreal.EditorAssetLibrary.set_metadata_tag(loaded_asset, tag_name, value_to_set)
unreal.EditorAssetLibrary.save_asset(asset_name)

如果您指定的标签名称在资源的元数据中还不存在,则使用您指定的值添加此名称。如果资源已经具有指定名称的标签,则更新此标签的值。

移除现有元数据标签

使用remove_metadata_tag(asset, tag_name)函数,并提供想要移除的标签的名称。例如:

import unreal
asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10"
tag_name = "CreatedBy"
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
unreal.EditorAssetLibrary.remove_metadata_tag(loaded_asset, tag_name)
unreal.EditorAssetLibrary.save_asset(asset_name)

如果想要从资源中移除 所有 元数据标签,可以循环调用此函数:

import unreal
asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10"
tag_name = "CreatedBy"
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
all_metadata = unreal.EditorAssetLibrary.get_metadata_tag_values(loaded_asset)
for tag_name in all_metadata:
    unreal.EditorAssetLibrary.remove_metadata_tag(loaded_asset, tag_name)
unreal.EditorAssetLibrary.save_asset(asset_name)

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见