我们现实世界中是24小时的昼夜循环机制,所以很多生存类的游戏中也会模拟这种昼夜循环,白天和夜晚会有不一样的机制,可以给玩家带来更刺激的体验。接下来就交给大家如何在UE4中制作一个简单的昼夜循环效果。
首先我们需要创建新工程,您也可以在现有工程中创建一个新场景。在新建场景时选择“Default”模板,因为这个模板自带天空盒和灯光,这正是我们所需要的。
创建完成之后我们根据自己的需要对场景进行微调。选择Floor,将其缩放调整为(100,100,1),其他保持默认。在正式制作昼夜循环之前我们首先分析一下思路。场景中的LightSource和SkySphere两个物体比较关键,LightSource为场景中的主光源,本质是Directional Light。SkySphere是场景中默认的天空盒,这个天空盒比较强大,自带朝阳、正午、夕阳和夜晚等各个时段的效果。稍微仔细观察就会发现两个物体之间还是有关联的。点击SkySphere的Directional Light Actor属性旁边的放大镜图标可以定位到LightSource物体,这说明天空盒的灯光来源是LightSource。
通过上面的分析可以得知,我们只需要控制LightSource的旋转,之后刷新SkySphere即可。接下来我们按照这个思路去实现。
因为需要实时刷新,所以需要借助Tick函数,这个函数每帧调用。首先将LightSource和SkySphere引入到关卡蓝图中。然后在Tick函数中控制LightSource的旋转,通过测试会发现,沿着Y轴旋转是我们想要的效果,所以我们需要调用LightSource的AddActorWorldRotation函数,修改Y轴的旋转,每帧增加1度的旋转,目前的关卡蓝图如下所示。
如果此时运行会发现场景中的灯光并没有改变方向,并且在停止运行之后还会报错,如下图所示。
大体意思是如果想对灯光进行变换,那么必须将灯光设置为 Movable 类型。
修改完之后运行游戏,发现场景中阴影和亮度已经有效果了,但是天空盒并没有刷新,依然是白天的样子,所以接下来我们需要刷新天空盒。SkySphere中有一个函数叫Update Sun Direction可以根据灯光朝向刷新天空盒的材质球。完善之后的关卡蓝图如下
做完上面的步骤,运行游戏可以发现已经初步实现了昼夜交替的效果。
这只是最简单的昼夜变换,您还可以继续完善,例如昼夜变换时灯光的亮度不一样等等功能。