Choose your operating system:
Windows
macOS
Linux
选择实现方法:
Blueprints
C++
本文介绍了如何创建一个能够改变颜色的光源Actor,并且在我们靠近后逐渐熄灭。
我们将用到
创建能够熄灭的光源Actor
首先,点击 新建(New) > 游戏(Games) > 空白(Blank) > 蓝图(Blueprint) 创建名为 FadingLights 的项目。
点击 添加/导入(Add/Import) 按钮,新建一个蓝图 Actor 类,将其命名为 BP_LightActor。
在内容浏览器中双击该BP_LightActor,在蓝图编辑器中打开它,然后打开 类默认值(Class Defaults)。
点击"添加组件(Add Component)",在下拉菜单中选择 盒体碰撞(Box Collision),将其重命名为 OverlapCollision。
在组件(Components)选项卡中,选中碰撞体积,将他拖动到DefaultSceneRoot上,使OverlapCollision成为新的根组件。
点击添加组件(Add Component),搜索并选择 点光源(Point Light)。
打开 事件图表(Event Graph),右关键帧点击图表,然后在 蓝图上下文菜单(Blueprint Context Menu) 中选择 添加时间轴(Add Timeline)。将时间轴命名为 PointLightTimeline。
导航至 我的蓝图(My Blueprint) 选项卡,然后在 变量(Variables) 类别中点击 +变量(+ Variable) 按钮添加 浮点(float) 类型的新变量。将变量命名为 BrightnessMultiplier,进行编译并将其 默认值(Default Value) 设置为 20.0。
编译 并 保存。
设置亮度轨道
当玩家与光源Actor的盒体组件重叠时,时间轴组件将需要使用浮点曲线来操控点光源组件的亮度值。
亮度初始值5000,并将在5秒钟时间内下降到0。
双击 PointLightTimeline节点,打开时间轴编辑器,添加浮点曲线轨道。
将浮点曲线轨道命名为 LightBrightnessFloatTrack,然后按住 shift 关键帧再点击,将两个关键帧添加到轨道。为一个关键帧分配时间值 (0,5000),为另一个关键帧分配时间值 (5,0)。
完成后的LightBrightnessFloat轨道将如下所示。
设置颜色轨道
当玩家与光源Actor的盒体组件边界重叠时,PointLight时间轴将使用线性颜色曲线轨道来操控点光源组件的颜色属性。
在 时间轴编辑器(Timeline Editor) 中添加颜色曲线轨道。
将新颜色轨道命名为 LightLinearColorTrack。
双击第一个颜色关关键帧帧,将其时间值修改为 0,将 RGB 值修改为:(R:1,G:0.665,B:0.015)。
将第二个颜色关键帧的时间值修改为 5,将 RGB 值修改为:(R:0,G:0,B:0)。
编译 并 保存 蓝图。
完成后的颜色轨道将如下所示。
蓝图阶段成果
创建碰撞事件以及更新逻辑
我们需要能在盒体组件遇到Actor时触发TimelineComponent。
此外,PointLightTimeline需要更新逻辑来更改亮度和颜色。
在BP_LightActor的蓝图编辑器中,找到组件(Components)选项卡,选择OverlapCollision盒体组件。在细节面板中,向下滚动到"事件"类别,点击 在组件开始重叠时(On Component Begin Overlap) 事件旁的 + 图标。
拖动 On Component Begin Overlap(OverlapCollision) 节点的执行引脚,连接到PointTimelineComponent节点的播放引脚。
在组件(Components)选项卡中,选择 PointLight 组件并拖入 事件图表(Event Graph)。
拖动 PointLight 的引脚,在操作菜单搜索并选择 设置强度(Set Intensity)。
拖动 PointLightTimeline 节点的 光源亮度浮点轨道(Light Brightness Float Track) 引脚,在操作菜单搜索并选择 float * float。
在 我的蓝图(My Blueprint) 选项卡中,点击 BrightnessMultiplier 浮点变量并拖动到事件图表中,选择 获得亮度乘数(Get Brightness Multiplier),然后连接到 float float** 节点。
将 更新执行(Update Execution) 引脚连接到 Set Intensity 节点,然后将 float * float 节点的结果连到 新强度(New Intensity) 输入引脚。
拖动 PointLight 节点,然后在操作菜单中搜索并选择 设置光源颜色(Set Light Color)。
在 PointLightTimeline 节点中,拖动 光源线性(Light Linear) 颜色轨道(Color Track) 引脚,连接到 Set Light Color 节点的 新光源颜色(New Light Color) 引脚。然后,将 Set Intensity 节点中的 执行引脚(execution pin) 连接到 Set Light Color 节点。
编译 并 保存。
完成后的蓝图
关卡设置
为了充分演示代码的作用,请在关卡中删除所有光源。
首先,将你的 BP_LightActor 实例放入关卡。
导航至 世界大纲视图(World Outliner),然后选择 大气雾(Atmospheric Fog) Actor。从细节面板中导航至 太阳(Sun) 类别,将其 默认亮度(Default Brightness) 值设置为 0。
从世界大纲视图中删除 天空球体(Sky Sphere) Actor。
此外,从世界大纲视图中删除 光源Actor(Light Source Actor) 。
导航至 工具栏(Toolbar),然后选择 构建(Build),在关卡中重新构建光照。
生成光照后,关卡应该看起来和下面差不多。
最终效果
现在光源Actor和关卡已经设置完成,点击 PIE 并自动获操控旁观者Pawn。
你可以控制旁观者Pawn了,试着走进光源Actor的盒体碰撞体积。
时间轴组件播放功能触发后,光源应该会开始改变颜色和亮度,并在5秒内完成改变。