Weather · 10

天气系统与天气状态

UDW 的安装与基础控制、天气状态由哪些值构成、预设与切换、随机变化与季节、手动状态、区域天气(覆盖体积与径向风暴)。

UDW 核心区域化天气

把 UDW 加入关卡

天气系统依赖 UDS:关卡里必须先有一个 Ultra Dynamic Sky,否则 UDW 不工作。 确认之后,从 Blueprints 文件夹把 Ultra Dynamic Weather 拖进场景, 它会自己找到 UDS 并把两边接起来。

默认情况下,UDW 会以一个“手动天气状态”启动,其数值与 UDS 上现有的 Cloud Coverage、Fog 保持一致。想快速换成别的天气,在 Basic Controls 的 Weather 里选一个预设即可。

B 站 · 点击播放BV1LyoTBRELS

基础控制

选中 UDW,Basic Controls 分类里有两件事:

  • Weather:选择天气设置预设。内置了 Rain、Partly Cloudy、Blizzard 等多种。 这个选择同时决定编辑器中显示的状态和关卡启动时的初始天气。
  • 风向(Wind Direction):影响天气粒子,也会接管 UDS 的云的移动方向。

天气状态是什么

“天气状态”就是决定当前天气的一组数值:

Cloud Coverage 云量 Fog 雾 Wind Intensity 风力 Rain 雨 Snow 雪 Dust 尘埃 Thunder / Lightning 雷电

另外还有一组材质状态,专门控制材质效果:

Material Snow Coverage 积雪覆盖 Material Wetness 湿润度 Material Dust Coverage 积尘覆盖

它们属于天气状态的一部分,但运行时“看到的”材质状态并不总是直接来自这些值, 具体机制见 材质效果。

谁在决定天气状态

当前天气可能来自以下几个来源,优先级与叠加关系由各自的设置决定:

来源作用
Weather 预设在 Basic Controls 里选中的预设,作为静态的全局天气。
Change Weather 函数在指定时长内从当前状态过渡到新预设。
随机天气变化按周期随机切换预设,概率受当前季节影响。
手动天气状态没有选中预设时使用;也可以单项覆盖,无论当前天气来自哪里。
天气覆盖体积(WOV)一个 Actor,按任意形状的区域施加不同天气。
径向风暴(Radial Storm)圆形区域内的天气,并且能从外部看到风暴本身。

天气预设

预设是数据资产,位于 Blueprints/Weather_Effects/Weather_Presets。 除了 Weather 变量,Change Weather、随机天气、覆盖体积、径向风暴也都用这些资产。

天气预设资产
预设资产所在的文件夹。

做自己的预设最省事的办法是复制其中一个现成资产,再改里面的数值。新建的预设和内置预设用法完全一致。 如果某个预设需要附加逻辑(例如额外的特效),见 自定义天气行为。

切换天气

运行时切换天气用 Change Weather 函数:立即开始向目标预设过渡,过渡时长由参数指定。 过渡完成后,这个全局天气会一直保持,直到你再次调用切换。

Change Weather 函数调用
这次调用会让全局天气在 15 秒内过渡到 Rain。
B 站 · 点击播放BV15yoTBRE8Q

随机天气变化

Random Weather Variation 分类让天气按周期随机切换,概率由季节与概率映射表决定。 先选择一个时间模式:

模式切换时机
Random Interval由 Random Weather Change Interval 给出最短/最长保持时间,到时间后换一个。
Hourly按 UDS 上流逝的时间,每小时切换。
Daily每天一次,具体时刻由 Random Weather Change Hour 指定。

Transition Length 是切换间隔中用于过渡的比例——不是绝对秒数。 例如间隔一小时、比例 0.1,就是用 6 分钟完成过渡。

Weather Type Probabilities 映射表里,每个预设对应一个概率值,按比例生效: 如果某个类型设 5、其余为 1,它被选中的概率就是其他类型的 5 倍。用哪张表取决于当前季节(见下一节)。

天气类型概率映射表
这张示例表里,Rain 被选中的概率是 Partly Cloudy 的两倍。

Begin Play Weather is Random 决定关卡开始时的天气:勾选则一开始就随机; 不勾选则先显示编辑器里设定的天气,等第一个间隔过去后才开始随机。

这里还可以套用气候预设(climate preset):它用真实世界的气候数据生成对应的概率表, 并同时设置温度分类里的温度区间。

随机天气与固定预设可以互相切换:调用 Change Weather 切到固定预设; 想切回随机,调用 Change to Random Weather Variation。

B 站 · 点击播放BV15yoTBRE8m

季节

Season 是 0–4 的浮点数,从春季开始依次推进。整数一般代表该季节的中段 (0 = 仲春、1 = 仲夏……),此时该季节的数值(随机天气概率、温度)会被纯粹地应用; 中间值表示两个季节的过渡,例如 0.5 表示一半春一半夏。

Season Mode 决定季节的来源:可以由 UDS 上的日期推导(日期在 Simulation 分类里设置,每天自动前进),也可以留空由你自己的蓝图通过 Set Season 函数控制。

由日期推导时,Season Day Offset 可以调整“哪一天对应哪个季节值”; Meteorological Seasons 决定偏移 0 对应的是气象季节还是天文季节。

材质里想按季节做效果,有两个节点:Sample UDW Season 输出每个季节的 0–1 权重; Season Color Blend 接收四个颜色输入,按当前季节混合。

手动天气状态

天气系统大部分设计都围绕预设资产,但你也可以不依赖预设,直接控制每一项数值:

  1. 在 Basic Controls 里把 Weather 清空(不选任何预设)。
  2. 此时下方的 Manual Weather State 分类生效,里面的各项数值就是当前天气。

也可以用 Change Weather 但不给预设参数,这样会过渡到手动状态。

手动状态还能当单项覆盖用:例如当前天气来自 Thunderstorm 预设,但你想单独控制雨量, 就勾选 Manual Rain Override 并设置 Manual Rain, 其余数值仍由预设提供。

B 站 · 点击播放BV1LyoTBREjw

天气覆盖体积(Weather Override Volume)

大地图需要“分区域天气”时,用 Weather Override Volume(位于 Blueprints/Weather Effects)。

区域形状由样条(Spline)决定:编辑样条上的点即可,右键某点可以新增点。也可以缩放 Actor, 但尽量避免非等比缩放。

配置方式与 UDW 的全局天气类似:在 Basic Controls 里选预设,也可以启用随机天气变化, 并使用自己独立的概率表(随机的时间/逻辑参数仍取自 UDW 的对应分类)。

设置说明
Transition Width 从外部天气过渡到内部天气所占的空间宽度。过渡是纯空间的,理想情况下应设得比较大,让玩家走进去时平滑变化。默认值偏小,只是为了 Actor 初始尺寸好操作。
Priority多个体积重叠时谁生效。
Temperature 分类玩家在该区域内时 UDW 使用的温度区间。
气候预设与在 UDS 上套用一致:改变概率表与该体积的温度区间。

“玩家是否在体积内”的查询位置由 UDW 的 Basic Controls 里 Control Point Location Source 决定。

默认情况下,覆盖体积会把自己的材质状态画进一张渲染目标,供天气材质函数采样。 这样从外面看是一片雪原,走进区域内又能看到区域外没有积雪。该行为可以在 UDW 的 Weather Override Volumes 分类里关闭或调整。

运行时也可以用函数控制它,用法与 UDW 类似:Change Weather 切到指定预设, Change to Random Weather Variation 切到随机天气。

如果想让覆盖体积做“天气以外”的事,创建一个子类并覆盖 Custom Volume Behavior。 UDW 使用该体积时每帧调用这个函数,输入 Alpha 表示玩家在体积内的程度(0–1)。

B 站 · 点击播放BV1LyoTBREsm

径向风暴(Radial Storms)

径向风暴是圆形区域内的天气,与覆盖体积的区别在于形状固定为圆形,并且能把自己渲染出来: 站在风暴外面,可以看到远处一团云、下方的雾与被遮住的闪电。

它也是为“动态存在”设计的:可以在运行时生成、淡入淡出,并沿直线移动穿过关卡。

限制

从外部看到风暴的效果只在 Sky Mode 为体积云时成立。其它 Sky Mode 下径向风暴仍可用, 但只是按玩家位置影响天气状态,看不到风暴本体。

虽然名字叫“风暴”,它也可以用来施加任何天气,包括晴朗天气。

生成与移动

UDW 的 Radial Storm Spawning 分类可以开启周期性自动生成:UDW 会一次生成一个, 让它经过玩家所在位置,用哪个预设可以由当前季节决定(类似随机天气)。 也可以自己生成或直接摆进关卡,不依赖自动逻辑。运行时控制的函数:

函数作用
Fade In Storm在给定时长内把 alpha 从 0 升到 1。
Fade Out Storm在给定时长内淡出,结束后销毁 Actor。
Move Storm Over Time在给定时长内移动到目标位置;可选择在移动结束时淡出并销毁。
径向风暴的生成与移动
示例:生成一个风暴,30 秒淡入,同时用 200 秒穿过关卡,最后 30 秒淡出并销毁。
B 站 · 点击播放BV1vyoTBRE1P

云层之上的天气

Sky Mode 为体积云时,玩家飞到云层之上后,UDW 默认会自动调整天气状态。 在 Weather Above Volumetric Clouds 分类里可以整体关闭这个行为, 也可以逐项调整云上时各天气值的倍率。