实现灯光闪烁

一个时间轴的应用示例。在这里示例中,我们将实现一盏可随时间闪烁并改变颜色的灯光。

Choose your operating system:

Windows

macOS

Linux

选择实现方法:

Blueprints

C++

本文介绍了如何创建一个能够改变颜色的光源Actor,并且在我们靠近后逐渐熄灭。

我们将用到

[点光源组件](programming-and-scripting/interactive-framework/Components/Lights/)
,该组建包含一个作为触发器的盒体组件,以及一个用于操控点光源Actor的时间轴组件。

图像替换文本

创建能够熄灭的光源Actor

  1. 首先,点击 新建(New) > 游戏(Games) > 空白(Blank) > 蓝图(Blueprint) 创建名为 FadingLights 的项目。

    图像替换文本

  2. 点击 添加/导入(Add/Import) 按钮,新建一个蓝图 Actor 类,将其命名为 BP_LightActor

  3. 在内容浏览器中双击该BP_LightActor,在蓝图编辑器中打开它,然后打开 类默认值(Class Defaults)

    图像替换文本

  4. 点击"添加组件(Add Component)",在下拉菜单中选择 盒体碰撞(Box Collision),将其重命名为 OverlapCollision

    图像替换文本

  5. 在组件(Components)选项卡中,选中碰撞体积,将他拖动到DefaultSceneRoot上,使OverlapCollision成为新的根组件。

    图像替换文本

  6. 点击添加组件(Add Component),搜索并选择 点光源(Point Light)

    图像替换文本

  7. 打开 事件图表(Event Graph),右关键帧点击图表,然后在 蓝图上下文菜单(Blueprint Context Menu) 中选择 添加时间轴(Add Timeline)。将时间轴命名为 PointLightTimeline

    图像替换文本

  8. 导航至 我的蓝图(My Blueprint) 选项卡,然后在 变量(Variables) 类别中点击 +变量(+ Variable) 按钮添加 浮点(float) 类型的新变量。将变量命名为 BrightnessMultiplier,进行编译并将其 默认值(Default Value) 设置为 20.0

    图像替换文本

  9. 编译保存

设置亮度轨道

当玩家与光源Actor的盒体组件重叠时,时间轴组件将需要使用浮点曲线来操控点光源组件的亮度值。

亮度初始值5000,并将在5秒钟时间内下降到0。

  1. 双击 PointLightTimeline节点,打开时间轴编辑器,添加浮点曲线轨道。

    图像替换文本

  2. 将浮点曲线轨道命名为 LightBrightnessFloatTrack,然后按住 shift 关键帧再点击,将两个关键帧添加到轨道。为一个关键帧分配时间值 (0,5000),为另一个关键帧分配时间值 (5,0)。

    图像替换文本

  3. 完成后的LightBrightnessFloat轨道将如下所示。

    图像替换文本

设置颜色轨道

当玩家与光源Actor的盒体组件边界重叠时,PointLight时间轴将使用线性颜色曲线轨道来操控点光源组件的颜色属性。

  1. 时间轴编辑器(Timeline Editor) 中添加颜色曲线轨道。

    图像替换文本

  2. 将新颜色轨道命名为 LightLinearColorTrack

    图像替换文本

  3. 双击第一个颜色关关键帧帧,将其时间值修改为 0,将 RGB 值修改为:(R:1,G:0.665,B:0.015)。

    图像替换文本

  4. 将第二个颜色关键帧的时间值修改为 5,将 RGB 值修改为:(R:0,G:0,B:0)。

    图像替换文本

  5. 编译保存 蓝图。

  6. 完成后的颜色轨道将如下所示。

    图像替换文本

蓝图阶段成果

图像替换文本

创建碰撞事件以及更新逻辑

我们需要能在盒体组件遇到Actor时触发TimelineComponent。

此外,PointLightTimeline需要更新逻辑来更改亮度和颜色。

  1. 在BP_LightActor的蓝图编辑器中,找到组件(Components)选项卡,选择OverlapCollision盒体组件。在细节面板中,向下滚动到"事件"类别,点击 在组件开始重叠时(On Component Begin Overlap) 事件旁的 + 图标。

    图像替换文本

  2. 拖动 On Component Begin Overlap(OverlapCollision) 节点的执行引脚,连接到PointTimelineComponent节点的播放引脚。

    图像替换文本

  3. 在组件(Components)选项卡中,选择 PointLight 组件并拖入 事件图表(Event Graph)

    图像替换文本

  4. 拖动 PointLight 的引脚,在操作菜单搜索并选择 设置强度(Set Intensity)

    图像替换文本

  5. 拖动 PointLightTimeline 节点的 光源亮度浮点轨道(Light Brightness Float Track) 引脚,在操作菜单搜索并选择 float * float

    图像替换文本

  6. 我的蓝图(My Blueprint) 选项卡中,点击 BrightnessMultiplier 浮点变量并拖动到事件图表中,选择 获得亮度乘数(Get Brightness Multiplier),然后连接到 float float** 节点。

    图像替换文本

  7. 更新执行(Update Execution) 引脚连接到 Set Intensity 节点,然后将 float * float 节点的结果连到 新强度(New Intensity) 输入引脚。

    图像替换文本

  8. 拖动 PointLight 节点,然后在操作菜单中搜索并选择 设置光源颜色(Set Light Color)

    图像替换文本

  9. PointLightTimeline 节点中,拖动 光源线性(Light Linear) 颜色轨道(Color Track) 引脚,连接到 Set Light Color 节点的 新光源颜色(New Light Color) 引脚。然后,将 Set Intensity 节点中的 执行引脚(execution pin) 连接到 Set Light Color 节点。

    图像替换文本

  10. 编译保存

完成后的蓝图

图像替换文本

关卡设置

为了充分演示代码的作用,请在关卡中删除所有光源。

  1. 首先,将你的 BP_LightActor 实例放入关卡。

    图像替换文本

  2. 导航至 世界大纲视图(World Outliner),然后选择 大气雾(Atmospheric Fog) Actor。从细节面板中导航至 太阳(Sun) 类别,将其 默认亮度(Default Brightness) 值设置为 0

    图像替换文本

  3. 从世界大纲视图中删除 天空球体(Sky Sphere) Actor。

    图像替换文本

  4. 此外,从世界大纲视图中删除 光源Actor(Light Source Actor)

    图像替换文本

  5. 导航至 工具栏(Toolbar),然后选择 构建(Build),在关卡中重新构建光照。

    图像替换文本

  6. 生成光照后,关卡应该看起来和下面差不多。

    图像替换文本

最终效果

现在光源Actor和关卡已经设置完成,点击 PIE 并自动获操控旁观者Pawn。

你可以控制旁观者Pawn了,试着走进光源Actor的盒体碰撞体积。

时间轴组件播放功能触发后,光源应该会开始改变颜色和亮度,并在5秒内完成改变。

图像替换文本

[INCLUDE:programming-and-scripting/blueprints-visual-scripting/UserGuide/Timelines/Examples/fading-lights-in-unreal-engine/fading-lights-c]
标签
本文基于此前的虚幻引擎版本编写,未针对当前的虚幻引擎5.0版本更新过。