变体管理器概述

变体管理器的定义及其工作原理。

Choose your operating system:

Windows

macOS

Linux

变体管理器(Variant Manager) 是虚幻编辑器中的一种特殊UI面板,可用于为关卡中地Actor设置多种不同配置。每个配置都称为"变体"。变体管理器有助于:

  • 设置 变体

  • 将变体归类成 变体集

  • 定义各个变体对应控制的Actor属性,或变体对应调用的函数。

  • 在虚幻编辑器中激活或"启用"不同变体。

要使用变体管理器,须启用项目的 编辑器(Editor)> 变体管理器(Variant Manager) 插件。

若使用 建筑、工程和施工(Architecture, Engineering, and Construction)自动化、产品设计和制造(Automotive, Product Design, and Manufacturing) 类别中的模板,此插件可能已默认启用。

变体管理器面板

变体管理器UI是用于名为"关卡变体集"的特定资产类型的编辑器。每次双击关卡变体集资产,变体管理器面板将打开,即可设置和使用该资产管理的变体。

变体管理器UI分为四列。

  1. 变体 面板:左侧面板列出了此"关卡变体集资产"管理的所有变体和变体集。例如,上图显示了三种变体集:车漆(Paint)标志漆(Logo Paint)车轮圈(Rims)。这些变体集包含多个变体:图片中能看到的有 蓝色(Blue)山樱桃色(Wild Cherry)纳贾兰色(Naranja color) 等车漆色。

  2. Actor 面板:每当你在最左侧的面板中选中变体后,第二个面板(Actor)会列出所有与此变体绑定的Actor。上图选择了 蓝色车身油漆(Body Paint Blue) 变体,因此 Actor 列表包括摩托车所有喷漆件的静态网格体Actor。

    当你绑定Actor与变体时,你会在它们之间创建一条链接。激活变体后,对应的Actor会以某种方式做出响应:要么是更改某个数据属性值,要么是调用一个函数。

  3. 属性 面板:当你在第二列中选中一个或多个绑定的Actor时,第三块面板(属性)会显示此变体中抓取了Actor的哪些属性。在上图中,我们抓取了 Material[1] 这个属性;这个材质决定了表面的可见漆色。

    抓取Actor的属性,就是将属性的目标值保存在变体中。

  4. 数值(Values) 面板:最右侧面板()列出了变体中针对 属性 面板中各个属性保存的数值。在这个例子中,激活 红色 变体后,变体管理器会将绑定Actor的 Material[1] 属性设为蓝色车漆材质。

  5. 依赖项(Dependencies) 面板:最后,底部面板(依赖项(Dependencies))列出了选定变体的所有约束。依赖项就是一种约束(constraint),当前变体启用时,它会激活其他变体。当前变体没有任何依赖项,但显示它是 包装(Packages) 变体集中的 默认(Default) 变体的一部分。

设置变体

上述从左到右的顺序通常就是场景中变体的整个设置流程。

  1. 决定场景中所需的变体,以及把变体归类成哪些变体集。基于这些决定,你可以使用左边栏提供的功能按钮,用这些变体集和变体来设置变体管理器。点击右键并从上下文菜单中选择操作,可执行以下操作:

    • 编辑现有变体。

    • 添加新的变体和变体集。

    • 将变体从一个集合移至另一个集合。

    • 指定变体和变体集的缩略图。这些缩略图稍后可作为用户界面的一部分,如产品配置器模板中所示。

    • 添加其他必要的依赖项。

  2. 创建完变体后,你可以绑定一个或多个Actor。你可以点击 Actors 列顶部的 + 按钮,将新Actor绑定给变体。你也可以将新Actor从 世界大纲视图 面板拖放至绑定Actor列表或左侧列中的变体上,即可将其绑定到变体。也可右键单击 Actor 面板中的列表,并使用快捷菜单绑定和解绑Actor。

  3. 对于各个绑定Actor,选择要用变体管理器更改的属性。

    每次绑定新Actor时,变体管理器将自动打开一个窗口,要求选择要抓取的属性。例如:

    ![选择要抓取的属性](choose-properties.png "Choose properties to capture")(w:500)

    可抓取任何向蓝图公开的属性。若绑定的Actor是蓝图Actor,这包括在类中创建的所有变量,以及标记为可编辑实例的变量。

    你也可随时单击 属性(Properties) 面板顶部的 + 按钮以便抓取其他信息,或者随时右键单击绑定Actor以抓取其他属性。你可以右键单击抓取属性以将其从列表中移除。

    还可设置变体管理器,在变体激活时调用绑定Actor公开的函数。详情请参阅变体激活时调用函数

  4. 对于抓取到的属性,你可以设置变体激活时,要让变体管理器应用什么值。可随时设置抓取的数值,方法是在变体管理器的 数值 面板中直接编辑该值。也可以通过以下方法,在虚幻编辑器UI中的其他地方修改属性值,然后更新保存的值,匹配属性的当前值:

    • 点击属性值旁边的 记录当前值(Record Current Value) 图标。

      ![记录当前值 - 图标](record-current-value-icon.png "Record the Current Value icon")(w:700)

    • 右键点击属性或其抓取值,并从快捷菜单中选择 记录当前值(Record Current Value)

      ![记录当前值](record-current-value.png "Record Current Value")(w:700)

    数值 列中直接更新已启用变体的抓取值时,不会立即看到更改反映在关卡视口中。要查看更改的效果,再次激活变体。或右键单击属性或其抓取值,然后从快捷菜单选择 应用记录值(Apply Recorded Value)

    ![应用记录的值](apply-recorded-value.png "Apply Recorded Value")(w:700)

若利用Datasmith从支持设置变体的第三方应用程序(包括Autodesk VRED和3DExcite Deltagen)导入场景,且已在源场景中设置变体,则Datasmith将自动设置 关卡变体集 资产和Actor。只需在项目中创建蓝图逻辑或UMG控件,用于启用变体以响应用户交互。

自动绑定和抓取

上章对逐一绑定Actor属性的方法进行了讲解,还有一种替代方法可在关卡中修改Actor时自动绑定Actor并抓取属性。

使用变体管理器UI左侧 变体(Variants) 列顶部的切换按钮可切换自动绑定和抓取。

![禁用自动抓取](auto-capture-off.png "Auto-capture disabled")

![启用自动抓取](auto-capture-on.png "Auto-capture enabled")

停用自动抓取

激活自动抓取

激活自动抓取后,变体管理器将聆听对关卡中Actor所做的所有变更。修改变体管理器可抓取的属性时,变体管理器将自动抓取为已修改属性设置的新值,并将其保存在当前选中的变体内——即最左侧列橙色高亮的变体。若修改的Actor尚未绑定到选定变体,其将自动绑定。

自动绑定和抓取有助于便捷设置变体。通常可按如下方式使用:

  1. 点击并选择左侧 变体 列中要修改的变体。若要在变更前开启变体的当前状态,双击变体。

  2. 将自动抓取按钮切换为激活状态。

  3. 修改要绑定到选定变体的Actor。操作时,变体管理器将自动绑定修改的每个Actor并抓取设置的每个新属性值。

  4. 按所需方式设置变体后,即可:

    • 点击或双击左侧 变体 列中的新变体,继续抓取另一变体的属性。

    • 将自动抓取按钮切换回停用状态,停止抓取变更。

激活自动抓取模式时需谨慎操作。若在关卡中操作时忘记已激活该模式,可能会误将多余变更记录到当前选定变体中。

在编辑器中激活变体

在运行时或在虚幻编辑器中激活变体时,变体管理器将通过绑定到该变体的Actor列表进行迭代。针对每个此类Actor,它将所有抓取属性设为存储于变体中的值。它还将调用绑定Actor设置调用的任意函数。

打开变体管理器UI后,可在虚幻编辑器中激活变体。使用以下任一方式:

  • 在最左侧列中双击要激活的变体。

  • 在最左侧列中右键单击要激活的变体,并从快捷菜单中选择 启用(Switch on)

    ![启用(Switch On)](switch-on-editor.png "Switch On")(w:500)

变体管理器使用小状态指示器来显示开启的变体:即抓取属性与关卡中绑定Actor当前应用的值完全匹配的变体。开启变体或在关卡中手动设置相同属性值时,将出现以上情况。

![停用变体](variant-deactivated.png "Deactivated Variant")

![激活变体](variant-activated.png "Activated Variant")

停用变体

激活变体

欲了解运行时激活变体的详情,参见下方的运行时蓝图API

设置依赖项

创建完变体和变体集后,你就可以选择为变体创建依赖项了。依赖项是一种约束,它可以与某个变体绑定,该变体启用后,其他依赖的变体也会启用。例如创建一个默认变体,能够将其他变体都设置回默认设置:

![依赖项示例](dependencies_example_1.png "Example of Dependencies")(w:700)

以下是设置变体的新依赖项的方式:

![创建依赖项的步骤](dependencies_steps.png "Steps to create a dependency")(w:700)

  1. 选择一个变体,点击依赖项面板中的 + 按钮,新建一个依赖项。

  2. 依赖项需要知道开启当前选择时你要启用的变体集和变体。点击 变体集(Variant Set) 下的下拉框,选择包含要添加到依赖项的变体的变体集。

  3. 然后从变体下拉菜单中选择要启用的变体。

为依赖项选择的变体不需要包含任何边界Actor

![](dependencies-tip-example.png)(w:700)

这里我们可以看到用于创建各种包装设置(package setting)选项的依赖项。注意,显示的变体仅包含依赖项,没有任何Actor绑定。

关于关卡变体集资产和Actor

每个关卡变体集资产都存储特定关卡中存在的Actor相关信息。在虚幻编辑器中打开该关卡后,可使用变体管理器UI激活不同变体。此时,在虚幻编辑器中,绑定Actor将立即更新其抓取属性的值。

若仅需在虚幻编辑器中激活变体,而非在运行时激活,则只需设置关卡变体集资产。

但在打包项目中,变体往往在运行时最有用。例如,假设虚幻引擎关卡中有一个150%的车辆BOM模型,并用多个变体表示不同饰件。编辑器中切换此类不同饰件选项的功能将十分实用。但若目标是创建车辆配置器,允许最终用户选择所需饰件,则还需要查看者在运行时能控制变体。

为此,需将关卡变体集资产拖放至关卡中。从而在关卡中创建新的关卡变体集Actor,该Actor链接至用于创建它的资产。这种特殊Actor提供一个蓝图接口,可用于通过项目中创建的蓝图gameplay逻辑和UMG接口与变体交互。有关使用变体管理器创建配置器的更多信息,请参阅产品配置器模板的文档。

每个关卡变体集资产仅限于处理单个关卡中的Actor。若打开不同关卡,变体管理器UI将不再影响新关卡中的对象。

若需控制多个不同关卡中的Actor,需为每个关卡单独创建关卡变体集资产,并逐个单独设置。若需以相同方式控制相同的Actor,可将关卡变体集资产要控制的所有Actor放到单个子关卡中,并将该子关卡添加到需要此类变体的两个关卡。

运行时蓝图API

关卡变体集Actor提供可用于在运行时与变体和变体集交互的蓝图API。此API支持两种主要用法:

  • 按名称或索引启用标识的变体。参阅下面的激活变体

  • 查询已配置变体集和变体的数据,包括其显示名称。参阅下面的访问变体数据

激活变体

若已知变体及其父变体集的名称或索引值,则可启用关卡变体集中的任何变体。

启用变体的最简单方式是,直接从引用拖到关卡变体集actor,找到 关卡变体集(Level Variant Sets) 类目,并选择 按索引启用变体(Switch On Variant By Index)按名称启用变体(Switch On Variant By Name)

![按索引或名称启用变体](bpapi-switchon.png "Switch on a Variant by index or by name")(w:700)

访问变体数据

可访问在变体管理器配置的所有变体集和变体的结构。

  1. 直接将Actor从引用中拖到关卡变体集,找到 关卡变体集(Level Variant Sets) 类目,并选择 获取关卡变体集(Get Level Variant Sets)

    ![获取关卡变体集](bpapi-get-levelvariantsets.png "Get Level Variant Sets")(w:700)

  2. 拥有对关卡变体集资产的引用后,直接从 返回值(Return Value) 端口拖出,找到 关卡变体集(Level Variant Sets) 类目,以访问资产中设置的变体集。

    ![访问变体集](bpapi-access-variantsets.png "Access Variant Sets")(w:700)

    利用 获取变体集(Get Variant Set)按命名获取变体集(Get Variant Set By Name) 节点根据索引或名称检索变体集。"获取变体集数(Get Num Variant Sets)"返回关卡变体集资产中配置的变体集总数。可将其与 获取变体集(Get Variant Set) 节点结合使用,在所有变体集上循环:

  3. 获取到对变体集的引用后,直接从其 返回值(Return Value) 端口拖出,找到 变体集(Variant Set) 类目,处理变体集包含的数据。

    ![访问变体集中的数据](bpapi-access-variantsetdata.png "Access data in the Variant Set")(w:700)

    可利用 获取显示文本(Get Display Text) 节点获取在变体管理器UI中为变体集设置的名称。

    也可使用类似于访问变体集本身时所用的一组节点来访问变体集中的变体。使用 获取变体(Get Variant)按名称获取变体(Get Variant By Name) 节点根据索引或名称检索变体。获取变体数(Get Num Variants) 返回此变体集中配置的变体总数。可将其与 获取变体(Get Variant) 节点配合使用,在变体集中的所有变体上循环,如上述所示循环变体集。

  4. 获取到对变体的引用后,直接从其 返回值(Return Value) 端口拖出,找到 变体 类别,以获取其显示名称,将其启用并访问其绑定Actor。

    ![访问变体中的数据](bpapi-access-variantdata.png "Access data in the Variant")(w:700)

此示例蓝图图表使用上述方法在所有已配置变体集和变体上进行循环迭代。它将每个变体集和变体的名称列示在屏幕和输出日志中。

Copy Node Graph

要执行其他操作,可使用同类方法在变体集和变体上迭代。只需一点想象力和UMG常规知识,便可使用此类信息编写UI系统,该系统可自动创建UI控件,反映在关卡变体集资产中配置的变体集和变体。

欲了解在蓝图中执行操作的相关背景信息,请参阅蓝图可视化脚本。欲了解使用UMG创建用户界面的方式,请参阅UMG UI设计器文档

制作人员

本页所用车辆模型由Allegorithmic友情提供。

本文基于此前的虚幻引擎版本编写,未针对当前的虚幻引擎5.0版本更新过。