1.3 - 变量

蓝图关卡示例1.3概览:变量

Windows
MacOS
Linux

BPVariablesExample.png

在本示例中,我们有一个蓝图Actor。它设置了两个聚光源,每个聚光源的颜色都由一个 变量(variable) 控制。在编程中,变量是计算机内存中的一片区域,用来保存数据。在蓝图脚本中,变量相当于某种"虚拟容器",我们可以将一些信息放入其中,也可以从中查询某些信息。本示例中的每个光源都有一个线性颜色变量(Linear Color variable),该变量存储特定颜色的RGB值。我们可以设置它的默认值,随时随地查询它,为它设置新颜色——这些都是蓝图脚本的功能。

虽然这里主要用到了线性颜色变量,但在蓝图脚本中,还有许多其他变量。每种变量都包含不同类型的数据,你需要对这些类型有个基本的了解,这点很重要。有关数据类型和变量用途的介绍,请参阅蓝图变量文档

在左侧聚光源中,线性颜色变量被设置为 公有(public),表示选中蓝图Actor后,你可以在 细节(Details) 面板中编辑这个变量。右边聚光源的设置类似,但线性颜色变量是 私有(private) 类型,表示更改颜色值时,你需要打开Actor的蓝图,在脚本中更改变量,或以其他方式在脚本中更改。

如需将变量设为公有,只需勾选它的 可编辑(Editable) 属性,或者点击 我的蓝图(My Blueprint) 窗口中变量旁的眼睛图标。变量设置成可编辑后,眼睛图标会高亮为黄色,表示该变量已可编辑。但现在还缺少提示信息,所以用户可能会不知道它的作用。为此,请在变量的 提示文本(Tooltip) 属性中输入介绍。完成此操作后,眼睛按钮将显示为绿色。

对于初学者来说,注意不要把所有变量都设置成共有。有时,允许用户修改变量可能会导致某些重要功能被更改,甚至被破坏。应该确保只有美术师或关卡设计师需要访问的变量才是公有的,将他们无权访问的变量设为私有。

确保用提示文本来解释公有变量的用途。

组件

这个蓝图Actor有很多组件,它包含两个完全独立的工作光源。它的大多数组件都是静态网格体组件,另外有少数文本渲染组件(Text Render Component)用于显示文本。当然,我们还添加了一些聚光源组件(Spot Light Component)来实现该效果。

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 - 这也是一个线性颜色变量,用于保存右侧私有光源的颜色。我们把它的默认值设置为红色。

我们还创建了两个变量来保存灯具镜头使用的动态材质实例(Dynamic Material Instances)。有了它们,我们就能将上文中的颜色变量值发送给灯具镜头,从而改变镜头颜色以匹配聚光源的颜色。

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

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

变量创建

并不是所有变量都需要在 我的蓝图(My Blueprint) 面板中手动创建。如果你觉得节点的输入值或输出值需要保存为变量,可以在对应的数据引脚上 点击右键,在上下文菜单中选择 提升为变量(Promote to variable)。具体操作如下:

  • 如果你 右键单击 数据输入引脚(位于变量左侧)

    • 创建一个对应类型的新变量。

    • 你可以输入名称,命名这个新变量。

  • 如果你 右键单击 数据输出引脚(位于变量右侧)

    • 创建一个对应类型的新变量。

    • 会新建一个"设置(Set)"节点,用于将新变量的初始值设置为引脚的输出值。

构造脚本

光源效果的大部分实现实际上都是在构造脚本中完成的。由于游戏开始后光源逻辑不需要更新,所以我们没有用到事件图表。

为了便于理解本例中的构造脚本,我们将其分为多个段落,并为每个段落添加了注释,如下所示:

点击查看大图

尝试在蓝图编辑器中打开该示例的构造脚本,这样看得更清楚些!

它执行的逻辑包括:

  • 设置光源颜色。

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

  • 将新的动态材质实例指定给灯具网格体。

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

设置光源颜色

SetLightColor.png

在这部分脚本中,我们获取了颜色的默认值,并将它们指定给光源作为光源颜色。这是段逻辑在脚本中首先执行,首先是为光源设置默认颜色:私有光源为红色,公有光源为绿色。最简单的方法是:

  1. 通过 Ctrl-拖动 将两个聚光源组件拖入图表,选择Get引用。

  2. 分别拖动组件,在搜索栏中输入"光源颜色(Light Color)"。列表中会出现设置光源颜色(Set Light Color)节点。

SetLightColor_node.png

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

CreateStoreDMI.png

接下来是为每盏灯的静态网格体创建动态材质实例(Dynamic Material Instance)。动态材质实例是材质的实例化副本,可以在游戏中以某种方式进行更新。在这个例子中,我们需要更改材质的自发光颜色,使其与聚光源的颜色相同。可以看到,我们创建了两个单独的动态材质实例。这是因为我们需要表示两种颜色。

在每个"创建动态材质实例(Create Dynamic Material Instance)"节点后,还可以看到我们将新创建的材质保存在一个变量中。这让我们可以在之后使用这些材质,如果我们想要调整颜色的话,就需要这些材质。我们可以直接将返回值(Return Value)连到需要使用的位置,但把它保存在变量中会使蓝图脚本看起来更整洁,而且可以在需要时随时在事件图表中获取它。

指定新的动态材质实例

AssigningDMIs.png

仅仅创建动态材质实例是不够的。你还必须将这些新材质指定给网格体的表面。在脚本的这一部分中,我们把新创建的动态材质实例添加到了灯具的静态网格体上。要注意,材质元素的索引是1,该材质元素已经位于灯具玻璃的静态网格体上。这样我们的材质就能更改灯具玻璃的颜色。

为动态材质实例设置颜色

SetLensColor.png

动态材质实例已经应用到表面,我们的最后一步是指定这些材质的颜色。在这个例子中,我们用到了两个变量。在本例中,我们将其中一个设置为公有(public),另一个设置为私有(private)。但要注意的是,这样设置主要是为了教学演示。实际上,把这两个变量都设置为公有可能更实际。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消