Choose your operating system:
Windows
macOS
Linux
在本示例中,我们有一个蓝图Actor。它设置了两个聚光源,每个聚光源的颜色都由一个 变量(variable) 控制。在编程中,变量是计算机内存中的一片区域,用来保存数据。在蓝图脚本中,变量相当于某种"虚拟容器",我们可以将一些信息放入其中,也可以从中查询某些信息。本示例中的每个光源都有一个线性颜色变量(Linear Color variable),该变量存储特定颜色的RGB值。我们可以设置它的默认值,随时随地查询它,为它设置新颜色——这些都是蓝图脚本的功能。
虽然这里主要用到了线性颜色变量,但在蓝图脚本中,还有许多其他变量。每种变量都包含不同类型的数据,你需要对这些类型有个基本的了解,这点很重要。有关数据类型和变量用途的介绍,请参阅 蓝图变量文档 。
在左侧聚光源中,线性颜色变量被设置为 公有(public) ,表示选中蓝图Actor后,你可以在 细节(Details) 面板中编辑这个变量。右边聚光源的设置类似,但线性颜色变量是 私有(private) 类型,表示更改颜色值时,你需要打开Actor的蓝图,在脚本中更改变量,或以其他方式在脚本中更改。
如需将变量设为公有,只需勾选它的 可编辑(Editable) 属性,或者点击 我的蓝图(My Blueprint) 窗口中变量旁的眼睛图标。变量设置成可编辑后,眼睛图标会高亮为黄色,表示该变量已可编辑。但现在还缺少提示信息,所以用户可能会不知道它的作用。为此,请在变量的 提示文本(Tooltip) 属性中输入介绍。完成此操作后,眼睛按钮将显示为绿色。
对于初学者来说,注意不要把所有变量都设置成共有。有时,允许用户修改变量可能会导致某些重要功能被更改,甚至被破坏。应该确保只有美术师或关卡设计师需要访问的变量才是公有的,将他们无权访问的变量设为私有。
确保用提示文本来解释公有变量的用途。
组件
这个蓝图Actor有很多组件,它包含两个完全独立的工作光源。它的大多数组件都是静态网格体组件,另外有少数文本渲染组件(Text Render Component)用于显示文本。当然,我们还添加了一些聚光源组件(Spot Light Component)来实现该效果。
这两组光源的设置稍有不同,但最终效果相同。每个光源的组件设置如下:
请注意,我们在组件名称中添加了 公有(Public) 和 私有(Private) 作为前缀。此外,缩进表示组件与另一个组件的父子关系,正如组件列表中所示。
-
壁挂(Wall Mount) - 这是静态网格体组件,固定在墙上。
-
支架(Bracket) - 这是静态网格体组件,它将连接到壁挂,并支撑灯具。
-
灯具(Light Fixture) - 这是灯具本身的静态网格体组件,用于表示玩家看到的聚光源。它的第二个材质元素(元素1)采用了一个特殊材质,因此它的颜色能实时变化以匹配光源颜色。
-
聚光源(Spot Light) - 这是聚光源组件,提供光照效果。
-
-
-
文本(Text) - 文本渲染组件,用来显示公有(Public)或私有(Private)字样。
-
说明(Description) - 一些描述性的文字,用于解释效果。
-
-
变量设置
为蓝图Actor添加组件时,你会发现 我的蓝图(My Blueprint) 面板(如在图表(Graph)模式中所示)会自动填充组件变量。这样你就能访问各个组件,从组件获取数据或设置数据。此外,我们专门添加了一些变量。
下方是专门为此效果创建的自定义变量:
-
PublicColor - 这是一个线性颜色变量,用于保存左侧公有光源的颜色。我们把它的默认值设置为绿色。
-
PrivateColor - 这也是一个线性颜色变量,用于保存右侧私有光源的颜色。我们把它的默认值设置为红色。
我们还创建了两个变量来保存灯具镜头使用的动态材质实例(Dynamic Material Instances)。有了它们,我们就能将上文中的颜色变量值发送给灯具镜头,从而改变镜头颜色以匹配聚光源的颜色。
-
PublicLightLensMaterial - 保存公有灯具镜头的动态材质实例。
-
PrivateLightLensMaterial - 保存私有灯具镜头的动态材质实例。
变量创建
并不是所有变量都需要在 我的蓝图(My Blueprint) 面板中手动创建。如果你觉得节点的输入值或输出值需要保存为变量,可以在对应的数据引脚上 点击右键 ,在上下文菜单中选择 提升为变量(Promote to variable) 。具体操作如下:
-
如果你 右键单击 数据输入引脚(位于变量左侧)
-
创建一个对应类型的新变量。
-
你可以输入名称,命名这个新变量。
-
-
如果你 右键单击 数据输出引脚(位于变量右侧)
-
创建一个对应类型的新变量。
-
会新建一个"设置(Set)"节点,用于将新变量的初始值设置为引脚的输出值。
-
构造脚本
光源效果的大部分实现实际上都是在构造脚本中完成的。由于游戏开始后光源逻辑不需要更新,所以我们没有用到事件图表。
为了便于理解本例中的构造脚本,我们将其分为多个段落,并为每个段落添加了注释,如下所示:
点击查看大图
尝试在蓝图编辑器中打开该示例的构造脚本,这样看得更清楚些!
它执行的逻辑包括:
-
设置光源颜色。
-
创建动态材质实例并将它们保存到变量中。
-
将新的动态材质实例指定给灯具网格体。
-
为动态材质实例设置颜色。
设置光源颜色
在这部分脚本中,我们获取了颜色的默认值,并将它们指定给光源作为光源颜色。这是段逻辑在脚本中首先执行,首先是为光源设置默认颜色:私有光源为红色,公有光源为绿色。最简单的方法是:
-
通过 Ctrl-拖动 将两个聚光源组件拖入图表,选择Get引用。
-
分别拖动组件,在搜索栏中输入"光源颜色(Light Color)"。列表中会出现设置光源颜色(Set Light Color)节点。
创建动态材质实例并存储它们
接下来是为每盏灯的静态网格体创建动态材质实例(Dynamic Material Instance)。动态材质实例是材质的实例化副本,可以在游戏中以某种方式进行更新。在这个例子中,我们需要更改材质的自发光颜色,使其与聚光源的颜色相同。可以看到,我们创建了两个单独的动态材质实例。这是因为我们需要表示两种颜色。
在每个"创建动态材质实例(Create Dynamic Material Instance)"节点后,还可以看到我们将新创建的材质保存在一个变量中。这让我们可以在之后使用这些材质,如果我们想要调整颜色的话,就需要这些材质。我们可以直接将返回值(Return Value)连到需要使用的位置,但把它保存在变量中会使蓝图脚本看起来更整洁,而且可以在需要时随时在事件图表中获取它。
指定新的动态材质实例
仅仅创建动态材质实例是不够的。你还必须将这些新材质指定给网格体的表面。在脚本的这一部分中,我们把新创建的动态材质实例添加到了灯具的静态网格体上。要注意,材质元素的索引是1,该材质元素已经位于灯具玻璃的静态网格体上。这样我们的材质就能更改灯具玻璃的颜色。
为动态材质实例设置颜色
动态材质实例已经应用到表面,我们的最后一步是指定这些材质的颜色。在这个例子中,我们用到了两个变量。在本例中,我们将其中一个设置为公有(public),另一个设置为私有(private)。但要注意的是,这样设置主要是为了教学演示。实际上,把这两个变量都设置为公有可能更实际。