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

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