前言:
最近在研究虚幻引擎的汽车配置器项目,在实操中发现默认的天空大气效果不足够支持24h动态变化和不同天气效果,故想结合市面上比较成熟 Ultra Dynamic Sky 超动态天空系统,集成到汽车配置器项目中来应对复杂天气变化的需求,另外,能通过UMG来操控具体天气效果变化。
前置条件
已安装虚幻引擎、下载好汽车配置项目、项目中下载好 Ultra Dynamic Sky。本文使用UE5.6来进行,其他版本也ok。其中UDS插件可以加入个人简介中的Q群获取(仅供个人学习使用)。
实操
模块拆解
打开汽车配置器项目后直接查看大纲窗口和关卡窗口。
在下面的关卡窗口中会发现主关卡中包含了五个不同的子关卡,子关卡分别代表不同的内容,我们主要关注在Lighting子关卡,因为默认场景中的光照环境是在此子关卡中,可以点击显示隐藏查看效果:
因此,接下来为了要用UDS的天气效果,需要把这个关卡隐藏或删除掉,加入一个新的包含UDS组件的子关卡,所以创建一个新的空关卡 Map_UDS_Lighting,并且在新创建的这个空关卡中加入UDS组件:
保存关闭此关卡后,打开汽车配置起关卡,将刚才创建的关卡拖入到Levels面板中,并且删除掉自带的Configurator_Lighting关卡:
会发现,场景中可以显示出UDS默认组件中的天气效果了,但是当点击运行时会报错:
当我们点击报错提示后内容会跳转到BP_Configurator蓝图中,这是因为汽车配置器的逻辑写在这个BP中,刚才删除和新增的关卡在这个蓝图中已经识别不到了,需要进行重置新配置。
BP_Configurator
点进去看到密密麻麻的节点,顿时就不想看了?😶🌫️其实只需要修改几处内容即可。因为我们主动删除过之前的存在的关卡,所以先找到关卡显隐功能实现的部分进行修改
在On Level Shown和On Level Hidden部分可以看到有个ConfiguratorLevelNames的数组变量,里面就包含了在关卡蓝图子关卡一样的命名数组,不难看出就包含之前删除过的关卡Configurator_Lighting,所以将此名字改成新替换的UDS子关卡名称 Map_UDS_Lighting:
此外在Load configurator部分内也能看到之前子关卡的名称,同样如上进行关卡名称替换:
修改完上述两处内容后,返回场景运行发现UDS天气关卡就起作用了:
UMG
接下来我们就应把场景中的UDS参数通过UMG来进行调用可实时更改,比如24h光影变化和不同天气预设。当我们点击运行后会发现已经有一层汽车配置器自带的UI层了,集成了功能框架。控制UDS天气的UI可以做在默认的这层UMG上面,也可以防止出现功能问题,另外添加一层额外UMG,这里选择第二种方式实现。
创建一个新的UMG
创建一个名为 UMG_UDS 的Widget Blueprint,按下图内容创建相应的组件,位置和样子作为参考,同时需要将Text_Time提升为变量方便后续操作:
将UMG添加到视口
需要创建一个新的BP,BP_UDS_UDW_Configurator,并且把这个BP放在跟UDS同关卡的子关卡中:
然后,在此BP_UDS_UDW_Configurator 中设置:
需注意,Delay是为了保持跟默认UI出现的时机一致
UMG蓝图实现
接下来在创建的UMG_UDS 中的 Graph中进行逻辑实现:
首先:
对Slider_Time组件添加 On Value Changed事件,为了是让用户用鼠标调整滑条时的数值进度能动态同步到时间文字显示:
当这部分做完运行工程会发现,移动滑条会实时驱动UDS天气进行24h变化。但是当开始运行时,时间文字显示并没有按照场景中默认的时间显示,并且滑条的位置运行时也默认在0的位置,没有根据场景中默认存在的时间初始化,所以要进行如下操作让滑条进度和时间文字信息跟初始值同步。
这样就会让文字时间数值获取到场景中UDS默认的时间来进行匹配。
同时,为Slider_Time中的Value创建一个绑定:
这样再次运行时,就可以实时同步数据了。
UMG节点总览:
结语
上面只是实现了一个初步的效果,只加了24h变化,还有天气变化没有实现,比如下雨、大雾、下雪等十几种天气预设也可以通过UMG进行调用。
好久没写文章了,不清楚这部分内容效果是否需求很大。
写文章不易,喜欢的小伙伴可以点赞、评论、转发,根据大家的呼声再决定是否继续完善UDS功能效果〰️