1.3 - 变量

蓝图示例关卡的概述,示例1.3:变量

Windows
MacOS
Linux

BPVariablesExample.png

在本例中,我们有一个蓝图Actor,它设置了两个聚光灯。每个聚光灯的颜色由一个 变量(variable) 控制。在编程中,变量被定义为计算机内存中存储一定数量数据的位置。在蓝图脚本中,变量的使用方式与虚拟容器完全相同,我们可以将一些信息放入虚拟容器中,也可以从中查询某些信息。在本例中,我们示例中的每一个光源都使用一个线性颜色变量,该变量存储特定颜色的RGB值。我们可以为这个颜色输入默认值,对其进行查询以便在不同的位置使用,并为它设置新颜色,这些都是蓝图脚本的一部分。

尽管在本例中我们主要使用线性颜色变量,但是在蓝图脚本中有许多不同类型的变量可供使用。每种类型的变量都包含不同类型的数据,至少要基本了解什么是主要数据类型,这一点很重要。有关这些类型的列表和有关变量使用的更多信息,请参阅蓝图变量文档

在左侧聚光灯上,该变量已被设置为 公共(public),这意味着在选择蓝图Actor时,它将在 细节(Details) 面板中可编辑。右边是类似的设置,但是线性颜色变量仍然是 私有(private)。这意味着,要更改颜色值,需要为Actor打开蓝图脚本并更改私有变量的默认设置,或者以其他方式将其作为脚本功能的一部分进行更改。

将变量公开只需要选中它的 可编辑(Editable) 属性,或者单击 我的蓝图(My Blueprint) 窗口中变量名称旁边的眼睛图标。一旦一个变量是可编辑的,它旁边的眼睛形状的按钮将突出显示为黄色。这表明,尽管该变量是可公开编辑的,但它没有工具提示,这可能会让一些用户感到困惑。要解决这个问题,请在变量的 提示文本(Tooltip) 属性中输入描述。完成此操作后,眼睛形状的按钮将显示为绿色。

对于初学者来说,重要的是要注意,您并不总是希望您的变量是公开的。有时,让用户能够轻松更改关键变量可能会破坏或潜在地更改重要功能。始终确保你的公共变量是艺术家或关卡设计师需要访问的东西,并将他们不应该触碰的东西保留为私有。

您应该始终确保您的公共变量有工具提示来解释它们的用途。

组件

此蓝图Actor的组件相当广泛,因为这个示例有两个完全独立的工作光源。大多数组件都是静态网格体组件,只有少数文本渲染组件用于标记。当然,我们还必须有一些聚光灯组件来完成这个效果。

LightComponentList.png LightComponentPreview.png

有两种不同的设置,尽管它们本质上是相同的。每个光源的组件设置如下:

请注意,单词 公共(Public)私有(Private) 将作为每个光源设置的前缀添加到这些名称中。此外,请注意缩进表示从一个组件到另一个组件的父级关系,就像在组件列表中所做的那样。

  • 壁挂(Wall Mount) - 这是静态网格体组件,固定在墙上。

    • 支架(Bracket) - 这是静态网格体组件,它将连接到壁挂,并支撑灯具。

      • 灯具(Light Fixture) - 这是灯具本身的静态网格体组件。对玩家来说,这就像是聚光灯。第二个材质元素(元素1)应用了一个特殊的材质,它的颜色将更新以匹配光源颜色。

        • 聚光灯(Spot Light) - 这是聚光灯组件,为这个效果提供照明。

    • 文本(Text) - 文本渲染组件,用作公共(Public)或私有(Private)的标签。

      • 说明(Description) - 一些描述性的文字,帮助进一步解释这种效果。

变量设置

当向蓝图Actor添加组件时,您将注意到 我的蓝图(My Blueprint) 面板(如在图表(Graph)模式中所示)自动为每个组件填充变量。这允许您在需要从组件中获取数据或设置数据时访问各个组件。然而,除此之外,我们还有一些专门为本例设置的特殊变量。

LightVariables.png

专门为此效果创建的自定义变量如下所示:

  • PublicColor - 这是一个线性颜色变量,用于存储应用于公共光源的颜色,位于左侧。我们在属性上设置了默认值绿色。

  • PrivateColor - 这也是一个线性颜色变量,存储应用于私有光源的颜色,位于右侧。我们在属性上设置了默认值红色。

还有另外两个变量用于保存应用于灯具镜头的动态材质实例。将这些设置好,我们就可以将上述变量的颜色值发送到其中,从而改变光源的镜头颜色,以匹配聚光灯组件的颜色。

  • PublicLightLensMaterial - 这保存了公共灯具镜头的动态材质实例。

  • PrivateLightLensMaterial - 这保存了私有灯具镜头的动态材质实例。

变量创建

并不是所有的变量都需要在 我的蓝图(My Blueprint) 面板中手动创建。如果在节点的输入或输出中看到需要存储在变量中的值,可以在适当的数据引脚上 右键单击,并从上下文菜单中选择 提升为变量(Promote to variable)。这将执行以下操作:

  • 如果您 右键单击 数据输入(变量左侧)

    • 将创建相应类型的新变量。

    • 您可以立即输入新变量的名称。

  • 如果您 右键单击 数据输出(变量右侧)

    • 将创建相应类型的新变量。

    • 还为新变量创建了一个集合(Set)节点,将新变量的初值设置为等于引脚的输出值。

构造脚本

这种效果下的大部分工作实际上是在构造脚本中完成的。由于游戏开始后光源不需要更新,所以我们不使用事件图。

为了便于理解本例中的构造脚本,我们将其分解为一系列注释块,如下所示:

单击查看完整尺寸(Click for full size)

如果您自己在蓝图编辑器中打开这个示例的构造脚本,它将更容易可视化!

执行的任务包括:

  • 设置光源颜色。

  • 创建动态材质实例并将它们存储到变量中。

  • 将新的动态材质实例分配到灯具网格体中。

  • 为动态材质实例设置颜色。

设置光源颜色

SetLightColor.png

在脚本的这些部分中,我们只使用应用的默认值,并将它们馈送到每个光源的光源颜色。因为这是脚本中要做的第一件事,所以它首先应用默认值,私有变量是红色的,公共变量是绿色的。设置这些节点最简单的方法是:

  1. 通过 Ctrl-拖动 到图形中创建每个聚光灯组件的Get引用。

  2. 拖出每一根线,在搜索栏中输入“光源颜色(Light Color)”。您将在列表中看到设置光源颜色(Set Light Color)节点。

SetLightColor_node.png

创建动态材质实例并存储它们

CreateStoreDMI.png

网络的下一部分为每个灯具静态网格体创建一个动态材质实例。动态材质实例是材质的实例化副本,可以在游戏过程中以某种方式进行更新。在这种情况下,我们可以更改材质的自发光颜色,使其与聚光灯组件中使用的颜色相匹配。您将注意到,我们创建了两个单独的动态材料实例。这是因为我们需要两个不同颜色的不同实例。

在每个创建动态材质(Create Dynamic Material)实例节点之后,您还将看到我们将新创建的材质存储在一个变量中。这让我们可以在以后使用这些材质,如果我们想要调整颜色的话,就需要这些材质。我们可以稍后将返回值输出连接到网络中的其他位置,但是将其存储在变量中会使蓝图脚本看起来更整洁,并使我们能够在事件图中需要时访问该材质。

分配新的动态材质实例

AssigningDMIs.png

仅仅创建动态材料实例是不够的。您还必须将这些新材质分配到网格体的表面。在脚本的这一部分中,我们将新的动态材质实例应用到灯具静态网格体中。需要注意的是,我们使用的是材质元素索引1,它已经被设置在要放置在镜头上的静态网格体上。这意味着我们的材质将用于更改光源镜头的颜色。

为动态材质实例设置颜色

SetLensColor.png

现在,动态材质实例已经应用到表面,我们的最后一步是为这些材质分配颜色。在这种情况下,我们通过两个变量来做。在本例中,我们将其中一个设置为公共(public),另一个设置为私有(private)。但是,应当注意的是,这主要是为了学术目的。实际上,如果这两个变量都是公共的,可能会更有用。

Select Skin
Light
Dark

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

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

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

发表反馈意见