1.3 -变量

BPVariablesExample.png

本页面的内容:

概述

在本示例中,我们有一个设置了两个聚光源的蓝图Actor。每个聚光源的颜色都由 变量 控制。在编程中,变量的定义就是在电脑的内存中存储一定数据量的位置。在蓝图脚本中,对变量的使用方法完全一致,它被作为我们放置和查询某类信息的一个虚拟容器。在这种情况下,我们示例中的每种光源都使用线性颜色变量,该变量为特定颜色存储RGB值。我们可以对此颜色提交默认值,查找该值以在不同位置使用它,并对该值设置新的颜色,所有这一切都作为蓝图脚本的一部分。

尽管在此示例中,我们使用的主要是线性颜色变量,实际上在您的蓝图脚本内还有许多其它类型的变量可供使用。每种类型的变量都存储了不同类型的数据,而您至少应对主数据类型有基础性的了解,这点很重要。如您想要了解变量使用类型的列表及更多相关信息,请参阅 蓝图变量文件

在左侧的聚光源中,该变量被设置为 public (公共)变量,这表示当蓝图Actor被选中时,它会在 细节 面板中变为可编辑变量。右侧聚光源也有一个类似的设置,但线性颜色变量仍为 private (私有)。这表示为变更颜色值,我们必须打开Actor的蓝图脚本并变更私有变量的默认设置,或将其作为脚本功能的一部分以其它方式来变更。

制作一个公共变量仅要求您勾选其 Editable (可编辑)属性,或点击 我的蓝图 窗口的变量名称旁的眼睛图标。当一个变量为可编辑状态时,该变量旁的眼睛形状的按钮会高亮为黄色。这就表明,尽管该变量为公共可编辑变量,但它没有工具提示,这可能会使得一些用户感到迷惑。为修正此问题,您可在该变量的 Tooltip (工具提示)属性中输入描述。该步骤完成后,眼睛形状的按钮将会变成绿色。

有一点对初学者很重要,您并不会总是想要把变量设置为公共变量。有时,如果让用户能轻易地变更关键变量,可能导致重要功能无法使用或对该功能产生潜在的影响。您需要始终确保您设置的公共变量是美术或关卡设计所 需要 使用到的变量,并把其它不应被他们设置的变量都设置为私有变量。

始终确保您的公共变量有工具提示!

组件

此蓝图Actor的组件比较全面,因为该示例有两套完全独立且可运作的光源。大部分组件均为静态网格物体组件,还有一些文本渲染组件用来作为标签。当然,我们也必须有一些聚光源组件以完成此特效。

LightComponentList.png LightComponentPreview.png

有两套单独的设置,尽管两者在本质上是相同的。每种光源的组件设置如下:

请注意对每个单独的光源设置,我们都会在名称前附加前缀词 Public (公共)和 Private (私有)! 另外,请注意缩进表示一个组件和另一个组件的父项和子项关系,正如其在组件列表中所显示的那样。

变量设置

在添加组件到蓝图Actor时,您将会注意到 我的蓝图 面板(同图表模式)会对每个组件自动填充变量。这可以让您在需要从组件获取数据时或对组件设置数据时能访问每个组件。然而除此之外,我们还特地为本示例设置了一些特殊变量。

LightVariables.png

我们为此特效特意设置的自定义变量如下:

我们还创建了其它两个变量,以保存应用到灯具镜头的动态材质实例。它们已被设置,这样我们可以把以上变量的颜色值传送给它们,而它们会变更光源的镜头颜色使之与聚光源组件的颜色匹配。

变量创建

并不是所有的变量都需要在 我的蓝图 面板内进行手动创建。如果您在节点的输入或输出中看到一个值,而且您知道需要将其存储在变量中,您可以 右键点击 相应数据引脚并从关联菜单中选择 Promote to variable (提升为变量)。这个选项会进行以下操作:

构建脚本

此特效的大部分工作实际上是在构建脚本中完成的。由于在游戏开始后,光源不必进行更新,我们将不使用事件图表。

为能在本示例中更容易地了解构建脚本,我们将其分为如下方所示的一系列注释区块:

点击查看完整尺寸

对于本例,如果您能在蓝图编辑器中打开它,您将能更容易地查看此示例的构建脚本!

此操作执行以下内容:

设置光源颜色

SetLightColor.png

对脚本的这些部分,我们直接采用被应用的默认值,并将它们填入每个光源的光源颜色中。由于这是我们在脚本中完成的第一项工作,我们首先应用默认值,也就是对私有变量应用红色光源,对公共变量应用绿色光源。设置这些节点的最简单办法是:

  1. 通过 按住Ctrl拖曳 每个聚光源组件到图表中,来分别为它们创建Get(获取)引用。

  2. 从每个聚光源中拉根线出来,然后在搜索行中输入"光源颜色"。您将会看到列表中的Set Light Color(设置光源颜色)节点。

SetLightColor_node.png

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

CreateStoreDMI.png

节点网络的下一部分就是为每个灯具的静态网格物体创建动态材质实例。动态材质实例就是材质的实例化拷贝,它可以在游戏中以某种方式进行更新。在这种情况下,我们可以变更材质的自发光颜色,使之能匹配聚光源组件中使用的颜色。您将会注意到,我们创建了两个单独的动态材质实例。这是因为对两种不同的颜色,我们需要不同的实例。

在每个Create Dynamic Material Instance(创建动态材质实例)节点后,您可以同时看到我们在变量中存储了最新创建的材质。这使得我们能在稍后访问材质,而这是我们调整颜色所需的。我们可以稍后在网络中连接 Return Value (返回值)输出到其它位置,但将其存储在变量中会让蓝图脚本看起来更整齐,并且可以让我们访问材质(如我们在事件图表中需要用到材质的话)。

分配新建动态材质实例

AssigningDMIs.png

仅创建您的动态材质实例还不够。同时您必须分配这些新建材质到您网格物体的表面。在脚本的这个部分中,我们将新建动态材质示例应用到灯具静态网格物体上。很重要的一点是我们要注意使用的是材质元素索引1,而它已在静态网格物体上进行了设置,将要被放置在镜头上。这表示我们的材质将会被用来变更光源镜头的颜色。

对动态材质实例设置颜色

SetLensColor.png

这是最后一步,现在动态材质实例已经被应用到了表面上,正要分配颜色到这些材质上。这种情况下,我们通过两个变量来完成该工作。本例中,我们将其中一个定为公共变量,另一个定为私有变量。然而在此处我们要注意,本例的主要目的是用于理论研究。在实际操作中,如果我们把两个变量都设置为公共变量,很可能要更为有用。