用途
本技能用于在 Ultra Dynamic Weather(UDW)中搭建随时间自然变化的天气系统,包括随机变化、季节循环、气候感知概率以及由这些因素共同推导的温度系统。
主要能力
随机天气变化
按季节与概率图周期性挑选新的天气预设。类别:Random Weather Variation。
计时模式:
- Random Interval:由 Random Weather Change Interval(最小/最大秒数)决定,系统保持一个预设一段随机时间后挑选新的。
- Daily:每个游戏内日一次,时间由 Random Weather Change Hour 设定。
- Hourly:每个游戏内小时一次。
Transition Length 表示两次变化之间用于从旧预设过渡到新预设的比例。
概率图:Weather Type Probabilities 图保存天气预设及其相对概率。数值是相对的,例如 { Rain: 5, Partly Cloudy: 1, Clear: 1 } 表示 Rain 的概率是另外两者的 5 倍。使用哪张图取决于当前季节,不同季节使用不同概率图,从而实现春季多雨与夏季炎热的差异。
Begin Play 行为:Begin Play Weather is Random 为 True 时,游戏开始时随机选择天气;为 False 时,以关卡编辑器当前显示的天气开始,并在第一个间隔后变化。
气候预设
同一类别下,可应用气候预设,用真实世界气候数据填充概率图,并在 Temperature 类别中相应设置温度范围。这是快速获得“热带丛林”“高山”“沙漠”等可信天气的最快方式。
从手动更改返回随机:Change Weather 会切换到静态预设,要返回随机可调用 UDW.ChangeToRandomWeatherVariation()。
季节
类别:Season。Season 变量是 0–4 的浮点值:0 为仲春,1 为仲夏,2 为仲秋,3 为仲冬,4 回绕到春季。整数值表示季节正中(该季节数据被纯粹应用),中间值表示过渡,0.5 表示一半春季加一半夏季。
Season 来源由 Season Mode 设置决定:Derived from date 使用 UDS 的日期(Simulation 类别,按天递增);Uncontrolled 表示 Season 变量不受控,需自行通过 SetSeason(value) 设置。
从日期推导时:Season Day Offset 会偏移什么日期对应什么季节值;Meteorological Seasons 决定偏移为 0 时季节代表气象季节还是天文季节。
在材质中采样季节:材质节点 Sample UDW Season 输出每个季节 0–1 的四个值(总和为 1);Season Color Blend 根据当前季节混合 4 个颜色输入。可用于季节驱动的材质效果,如秋叶颜色、冬季岩石色调。
温度
类别:Temperature。采样方式:
UDW.GetCurrentTemperature(unit, sampleLocation) // unit: Fahrenheit 或 Celsius // sampleLocation: Global,或按位置(体积 + 室内)
温度计算方式(温度被视为天气的产物,而非驱动因素):
- 从 0 开始。
- 加上 Temperature 类别中每个 Temperature Bias 值(偏置反映一天中的时间、天气状态等因素)。
- 将得到的 -1..1 值映射到当前季节的 Min/Max 范围。
- 加上一个缓慢变化的随机值,按 Randomize Temperature 缩放。
- 若 sampleLocation != Global:采样关卡中的 Temperature Volumes;根据采样点的 Player Occlusion 应用 Interior Temperature(Player Occlusion 在 UDS 上)。
温度与天气覆盖体积:Weather Override Volumes 在玩家位于其中时应用自己的温度范围,可按 WOV 配置或禁用。
温度体积:Actor 类 Temperature Volume 位于 Blueprints/Weather_Effects/。放置后可创建局部温度效果。例如放在火堆周围并设置正的 Temperature Offset,体积内采样到的温度会更高。
在屏幕上显示温度:UDW Thermometer 控件位于控件设计器面板的 Ultra Dynamic Sky Widgets 下,可采样并显示当前温度,拖入 UMG 控件即可。
使用方式(运行时 / 蓝图脚本摘要)
- 将天气更改为预设:ChangeWeather(preset, transitionLength)
- 更改为手动状态:ChangeWeather(null, transitionLength)
- 从手动切回随机:ChangeToRandomWeatherVariation()
- 手动设置季节:SetSeason(value)(当 Season Mode 不是从日期推导时)
- 采样温度:GetCurrentTemperature(unit, sampleLocation)
- 在材质中采样季节:Sample UDW Season MF、Season Color Blend MF
适用场景
- 设置会周期性自行变化的天气。
- 让天气随季节变化。
- 为某区域选择真实世界气候(热带、高山、沙漠)。
- 从游戏代码读取华氏或摄氏温度。
- 添加局部热区(靠近火)或冷区。
- 在屏幕上显示当前温度。
- 基于季节驱动材质。
限制与注意事项
- 随机天气变化不触发:模式被设为 Random Interval / Daily / Hourly 之外的值,需选择计时模式。
- 开始游戏时天气不随机:Begin Play Weather is Random 为 false,需设为 true。
- 随机天气总是选同一预设:概率图强烈偏向某一项,或图中只有一项,需检查当前季节的概率图。
- SetSeason 无效:Season Mode 设为从日期推导,会覆盖手动季节,需先将 Season Mode 切换为 Uncontrolled。
- 天气变化但温度读数始终相同:未针对所关注的天气配置 Temperature Bias 值,需为该天气/时间添加偏置条目。
- GetCurrentTemperature(local) 与 Global 读数相同:采样位置设为 Global,或没有 Temperature Volumes,或 Player Occlusion 在该位置未计算遮挡。
- 气候预设覆盖了自定义概率图:应用气候预设会破坏性地覆盖概率图,实验前应先保存配置资产。
参考资料与源材料
文档(Ultra Dynamic Weather 9.5):Random Weather Variation、Seasons、Sampling Temperature(含温度计算方式、Temperature Volumes、屏幕显示)。
插件资产路径:Blueprints/Weather_Effects/Weather_Presets/(按概率图加权的预设资产)、Blueprints/Weather_Effects/(Temperature Volume actor 类)、控件设计器面板 → Ultra Dynamic Sky Widgets → UDW Thermometer。
相关技能:udw-setup-and-state、uds-simulation(当 Season Mode 设为从日期推导时,日期驱动季节)、udw-spatial-weather(WOV 在局部覆盖温度范围)、uds-modifiers-configs-state(Player Occlusion 驱动 Interior Temperature)、udw-material-and-screen-effects(Freezing Breath 使用计算出的温度)。