游戏版本 756039
首页 › 游戏机制 › 温度

温度 Temperature

机制体温过冷过热隔热

温度是角色与环境共同参与的生存机制。体温会向所在地环境温度、热源、冷源和食物效果变化;低于冰点会冻伤,高于过热阈值会中暑,保暖或隔热装备可以减慢对应方向的变化。

概述

体温由 components/temperature.lua 管理,初始值为 35,并限制在 -20 至 90 之间。每次更新会先取得所在地的环境温度,再叠加温度修正、潮湿惩罚、装备与携带物品的热源/冷源、腹内食物效果,最后根据环境偏冷或偏热决定体温变化速率。

角色处于低于冰点的温度时会触发 startfreezing,高于 70 时会触发 startoverheating。离开对应区间会触发相反事件。温度效果不只是屏幕提示:组件会持续向生命组件施加 cold 或 hot 伤害。默认冻伤速率为 150 / 120 生命值每秒;过热默认使用同一速率,除非实体单独设置了过热伤害速率。

体温计算

每次更新的大致流程如下:

  1. 读取环境温度:通常使用当前位置的 GetTemperatureAtXZ(x, z);若附近存在有效的温度覆盖区域,则使用最近覆盖区域的温度,否则使用世界温度。
  2. 计算基础温差:环境温度 + 温度修正 + 潮湿惩罚 − 当前体温。潮湿惩罚会随潮湿百分比线性增加,最大幅度为 30,因此潮湿时会更容易感到寒冷。
  3. 加入热源和冷源:装备栏、物品栏、溢出容器以及手持物品中的 heater 都会参与计算。热源只在其温度高于当前体温时加热,冷源只在其温度低于当前体温时降温。
  4. 根据环境方向限制速率:环境温度不低于 35 时,升温会受到夏季隔热影响,而降温按 1 的常规速率或过热时的 5 速率处理;环境更冷时则对降温应用冬季保暖,升温按常规或解冻速率处理。
  5. 应用保鲜容器等外部速率倍率,并把体温限制在实体自身的最小、最大温度范围内。

直接调用 DoDelta 改变体温时同样会应用隔热:升温使用夏季隔热,降温使用冬季隔热;传入跳过隔热参数时才不会应用这一步。

季节与环境

世界环境温度由 components/worldtemperature.lua 计算,基础来源包括季节温度、昼夜阶段温度、连续噪声,以及可能的全局温度倍率和基准点修正。源码中的季节曲线随季节进度变化,昼夜也会加入不同的阶段修正;因此同一季节内,环境温度并非固定值。

洞穴网络会把世界温度乘以 0.6,并使用 0 作为修正基准。当前位置温度还可以被温度覆盖区域改写,例如特定地形或局部热源区域;温度组件会优先采用最近且处于有效半径内的覆盖者。

昼夜本身还会影响夏季隔热:地表黄昏加入 60,夜晚加入 120。这不是直接改变角色当前体温,而是让体温变化更慢。避雨或其他 sheltered 状态也会提供夏季隔热;在非常炎热且处于遮蔽状态时,树荫冷却逻辑会把目标温度拉向 45,其触发条件是当前体温超过 63。

过冷与过热

过冷

当前体温低于冰点时,角色进入冻结状态,并按时间持续受到 cold 伤害。装备冬季保暖、靠近热源、携带或食用升温物品,都可以让体温更快回到安全区间。体温组件的默认冻伤致死时间由 120 和角色生命上限共同决定;个别角色可以通过 SetFreezingHurtRate 覆盖默认速率。

过热

当前体温高于 70 时进入过热状态,并持续受到 hot 伤害。夏季隔热装备、树荫、冰冷热源和降温食物可以降低体温;源码中,过热时降温使用更快的解冻速率 5。个别实体也可以通过 SetOverheatHurtRate 使用独立的过热伤害速率。

温度伤害默认不是非致命伤害:NONLETHAL_TEMPERATURE 的当前值为关闭状态,因此不能仅依赖温度系统自动保留最低生命值。

保暖、隔热与热源

装备的 insulator 分为冬季和夏季两种类型。冬季隔热只在环境偏冷、角色正在降温时发挥作用;夏季隔热只在环境偏热、角色正在升温时发挥作用。当前版本的基础档位为:

档位 数值
小型隔热 60
中型隔热 120
大型隔热 240

角色自身的胡须会增加冬季隔热,同时减少夏季隔热。遮蔽状态还会增加 180 的夏季隔热;黄昏和夜晚的额外隔热则见上一节。

heater 不等同于 insulator:热源和冷源会直接改变温差,隔热则主要减慢体温朝环境方向变化的速度。实际处理时,冬季优先准备冬季隔热和稳定热源,夏季优先准备夏季隔热、树荫或冷源;单纯堆叠错误季节的隔热类型,不能有效解决当前方向的体温变化。

可作为典型例子的装备包括:带有夏季隔热和冷源的冰帽,以及带有夏季隔热和冷源的西瓜帽。它们的具体冷却目标分别由 40 和 55 给出。

食物温度效果

食物通过 edible.temperaturedelta 和 edible.temperatureduration 提供腹内热量或冷量。吃下食物后,效果会保存一段时间并作为隐式热源/冷源参与体温计算,而不是简单地把当前体温瞬间改成某个固定值。新的有效温度食物会覆盖之前的腹内温度效果。

当前版本的通用温度效果为:

类型 体温修正 持续时间档位
升温食物 40 5、10 或 15
降温食物 -40 5、10 或 15

升温食物只在当前体温低于 62 时继续发挥作用;降温食物只在当前体温高于 12 时继续发挥作用。食物的 chill 会按其温度效果持续时间稀释升温效果;食谱或香料还可以修改温度效果的幅度和持续时间。

例如冰淇淋提供降温效果并使用长持续时间,西瓜冰棍提供降温效果并使用中等持续时间,辣椒炖肉提供升温效果并使用长持续时间。

实战处理

  • 准备阶段:根据季节制作对应类型的隔热装备;冬季优先冬季隔热,夏季优先夏季隔热。若要跨季节使用同一套装备,要确认其类型是否真正对应当前环境方向。
  • 寒冷时:靠近有效热源,穿冬季隔热装备,并在体温仍低于安全区间时食用升温食物。热源的有效性取决于其 heater 类型、距离、有效半径以及角色是否潮湿。
  • 炎热时:进入树荫或其他遮蔽区域,使用夏季隔热装备、冰冷热源和降温食物。潮湿会使热源的加热效果按 0.75 的因素削弱,因此淋雨后不能只依赖篝火快速回温。
  • 注意体温上限与阈值:体温达到过热阈值或低于冰点就会开始持续伤害;离开危险区后仍需要等待体温实际回到阈值以内,单纯离开热源或冷源不会立即清除状态。
  • 特殊容器:冰箱会以冷却速率 1 处理其中物品,并且通常不会把物品冷却到低于冰点;带有 lowcool 标签的容器使用更低的冷却速率。睡袋可以提供自己的环境温度覆盖。

代码参考

  • scripts/components/temperature.lua:体温初始化、OnUpdate 环境与热源计算、GetInsulation 隔热汇总、危险阈值事件和温度伤害。
  • scripts/components/worldtemperature.lua:季节、昼夜、噪声与全局修正组成的世界温度。
  • scripts/components/temperatureoverrider.lua:局部温度覆盖与当前位置温度查询。
  • scripts/components/edible.lua:食物温度效果写入腹内温度状态。
  • scripts/components/insulator.lua:冬季/夏季隔热类型与数值接口。
  • scripts/components/health.lua:cold、hot 温度伤害及非致命温度选项。
  • scripts/tuning.lua:体温阈值、速率、隔热、潮湿和食物温度相关平衡常量。

相关条目

冰帽西瓜帽冰淇淋西瓜冰棍辣椒炖肉潮湿

版本记录

  • 首次收录:build 756039;正文编写:build 756039;核对至:build 756039

依据源码:scripts/components/temperature.lua scripts/components/worldtemperature.lua scripts/components/temperatureoverrider.lua scripts/components/edible.lua scripts/components/insulator.lua scripts/components/health.lua scripts/prefabs/cave_network.lua scripts/prefabs/hats.lua scripts/preparedfoods.lua scripts/tuning.lua

涉及实体:temperature(temperature)