要完成这个功能之前首先介绍一下需要用到的组件以及他们的一些参数。因为笔者也是刚开始接触ue4,可能有些地方会写地有点繁琐,因为是第一次接触,有可能有写的不对的地方,望指正。
DirectionalLight可以看做是模拟太阳发出的光源,这个光源所发出的光都是相互平行的。
平行光不像是SpotLight以及PointLight那样距离物体越远,光的强度就不一样,而DirectionalLight所散发出来的光,所照射的整个区域范围内光强是一样。换句话说,不管怎么拉动平行光的位置,他的光照效果都不会发生改变。
进去后每个场景世界大纲里都会有一个默认存在的Sky Sphere,删掉了可以在左侧Modes搜索到BP_Sky_Sphere。
本次用到的参数有下面一些,介绍一下:
下面就是正式的蓝图实现了。
笔者在一开始尝试的时候,发现如果DiretionalLight的Rotation为默认值的话,在最后完成太阳旋转移动的时候,最晚的天空只能是黄昏,而不是漫天繁星,所以在一开始就应该把定向光的Rotation设置为(0,90,0)。
并且,我们是后面是需要实时移动光源的,所以将Mobility设置为Movable(可移动的)。
然后回到天空球的属性面板,点击一下Refresh Material(刷新材质)。目前的效果如下图所示:
打开Level Blueprint(关卡蓝图),右键创建一个Tick的事件,选择下图的第一个。
回到场景主页面,选中Light Source物体,再回到蓝图中右键,创建Light Source的引用。
接着从light source拉出一个选框,搜索addactorworldrotation,进行添加
然后将这些连接起来:
为了方便调整参数,应该将Delta Rotation这个值细化调整,speed参数是自行添加的变量,因为我们只想要昼夜交替的效果,所以简单一点的办法就是让太阳旋转,所以只需要更改y这个值,speed值设置为0.5:
因为太阳的高度是根据定向光源的旋转而变化的,而天空的颜色是根据太阳的位置变化的,所以我们只需要改变定向光源的旋转然后用SkySphere自带的刷新函数UpdateSunDirection就可以了。
于是会场景主页面选中sky_sphere回到蓝图中创建它的引用,在创建他的事件UpdateSunDirection:
所以完整蓝图为:
到此,运行项目即可执行昼夜交替。
目前这个功能缺点还有很多,因为刚接触还不熟悉。
因为笔者参加的还是团队工作,所以需要把这个功能放到有水体的场景中。然后就出现了一下一些问题:
希望继续学习之后,能修正这些bug。