Skip to content
游戏世界地形纹理 · 机制与百科资料

生物生成理论 ​

从荒野中的孤狼到深海里的鲨鱼群,Survivalcraft 的世界并非随机堆砌,而是一套精密的生成—限制—消亡系统在背后运转。理解它,你就能预测什么时候危险会来,以及如何利用规则规避或狩猎。

生成架构 ​

生存战争使用区块级和生物级两层系统协同工作,前者管理视野范围内的生物实体加载/卸载,后者负责实际生成和种群控制。

区块级管理 ​

游戏世界被划分为 16×16 的区块,玩家周围的区块会被激活并开始生成生物,远离玩家的区块则会取消激活,上面的生物暂时消失。

参数数值说明
生成激活半径48 区块(768 格)玩家周围 48 个区块范围内会生成生物
取消激活半径60 区块(960 格)超出 60 区块范围的生物会消失
最后访问半径8 区块记录玩家最近访问过的区块
区块最大存活时间76800 游戏时间区块数据的最大保留时长

更新节奏:

事件间隔(游戏时间)说明
丢弃旧区块60 秒检查区块是否过期需要清理
更新访问时间5 秒记录区块最近被访问的时间
激活新区块4 秒扫描视野范围,将新区块加入生成队列
取消激活区块2 秒检查远离玩家的生物,准备让其消失

区块激活每 4 秒一次,取消激活每 2 秒一次。移动到新区域后,最多 4 秒内就会开始生成生物。

生物级管理 ​

生物生成有两套独立的系统,各自有数量上限:

参数数值说明
随机生成全局上限26 只白天和普通生成的生物总数
随机生成区域上限3 只16 格半径内最多 3 只
随机生成区域半径16 格区域检查的范围
常量生成全局上限(普通模式)6 只夜间出没的掠食者总数
常量生成全局上限(挑战+残酷)12 只挑战模式下夜间生物翻倍
常量生成区域上限4 只42 格半径内最多 4 只夜间生物
常量生成区域半径42 格夜间生物的区域检查范围
种群密度降低系数0.25同种超过 8 只后,生成概率降至 25%

两套上限互不影响。白天最多 26 只普通生物,晚上额外最多 6(或 12)只夜间掠食者。夜间生成完全独立,不受白天上限约束。

持续与非持续生成 ​

游戏中的生物生成系统有两种模式:

名词等价

持续生成和常量生成是等价的,非持续生成是随机生成,两者只是不同的叫法,下文多用常量和变量来解释。

生成模式含义触发条件上限典型生物
非持续(随机生成)有生成间隔,每隔一段时间尝试一次季节间隔(夏 60 秒 / 冬 120 秒)全局 26 只白天的牛、马、鹿、鸭子等
持续(常量生成)每帧检查,条件满足就生成,没有间隔天空光照 < 0.1(夜间)全局 6 / 12 只夜间的灰狼、郊狼、鬣狗等

"持续"不是说生物永远存在,而是说生成行为是持续的——夜间每帧都在检查是否要生成新的掠食者,只要有空位就会立即补上。这就是为什么天一黑,掠食者会迅速出现而不是等到下一个生成间隔。而白天的随机生成有 60 秒冷却,不会瞬间刷出一堆生物。

注意:洞穴生物属于非持续生成(随机生成),但它们生成在洞穴里,和地面生物共享 26 只上限。夜间常量生成的生物则是独立的 6/12 只上限。

生成主循环 ​

每个游戏时间单位,生物生成系统执行三步操作:

  1. 处理新激活的区块 — 新区块最多尝试 10 次随机生成生物
  2. 处理已激活的区块 — 已有区块每帧尝试 2 次常量生成(夜间)
  3. 随机生成新生物 — 每隔一段时间在玩家附近随机生成一只

冬季的随机生成间隔是 120 秒,其他季节是 60 秒。冬季生物明显减少是因为生成频率直接减半了。

随机生成 ​

随机生成需要同时满足以下条件:

  • 环境行为模式设为"动态生态"(默认开启)
  • 全局随机生成生物总数 < 26 只
  • 玩家 68 格范围内的生物数 < 52 只
  • 到达季节间隔(夏季 60 秒,冬季 120 秒)

生成位置类型按概率选择:

位置类型概率说明
地面30%需要天空光照足够亮
洞穴30%需要环境足够暗
水域40%需要水方块

生成点在玩家周围 24-48 格范围内随机选取,最多尝试 10 次找到合适位置。水域生成占比最高,海洋比陆地更"热闹"。

区块生成 ​

区块类型尝试次数生成模式
新激活区块10 次随机生成
已激活区块2 次常量生成(夜间)

常量生成上限根据游戏模式动态调整:

  • 创造/无害/生存模式:全局 6 只,每区域 4 只(42 格半径)
  • 挑战/残酷模式:全局 12 只,每区域 4 只(42 格半径)

挑战模式夜间生物翻倍,这是挑战模式更危险的重要原因之一。

适生度系统 ​

适生度计算 ​

每种生物都有自己的"适生度"——衡量这个地方有多适合该生物生成。适生度越高,被选中的概率越大。

最终适生度={基础适生度×0.25同种生物 > 8 只基础适生度其他情况\text{最终适生度} = \begin{cases} \text{基础适生度} \times 0.25 & \text{同种生物 > 8 只} \\ \text{基础适生度} & \text{其他情况} \end{cases}

同种生物超过 8 只后,适生度直接降到原来的四分之一,这是天然的种群平衡机制——某一种生物太多了就不容易再生更多。天然种群上限大约在 8-10 只。

加权随机选择 ​

生成时,所有符合条件的生物按适生度加权随机选择:

第 i 种生物被选中的概率=适生度i∑j=1n适生度j\text{第 i 种生物被选中的概率} = \frac{\text{适生度}_i}{\sum_{j=1}^{n} \text{适生度}_j}

适生度越高的生物被选中的概率越大,但适生度低的生物也有机会出现,只是概率小。

生成点检查 ​

不同位置类型有不同的生成条件:

地面生成条件:

条件要求
高度范围第 4 层到最高层减 4
光照天空光与环境光之差 > 3(不够亮就不生成)
下方方块可碰撞或水
当前方块不可碰撞且非水(要有足够空间)
上方方块不可碰撞且非水(要有足够空间)

洞穴生成条件:

条件要求
光照天空光与环境光之差 < 5(不够暗就不生成)
空间要求同地面生成

水域生成条件:

条件要求
当前方块必须是水
上方 1 格不可碰撞
上方 2 格不可碰撞

生物适生度表 ​

地面随机生成 ​

适生度值越大越容易生成。"距岸"是到海洋岸边的距离,正值表示在陆地上,负值表示在海里。"—"表示该生物对此参数无要求。

生物适生度距岸温度湿度海拔脚下方块
鸭2.5—中高高—草地 / 树叶
渡鸦2.5—干燥或寒冷——沙地 / 草地
海鸥2.5-100 ~ 40————
野猪0.25> 20—高< 80草地 / 泥土
棕牛0.05> 20> 8> 6< 70草地 / 泥土
黑牛0.05> 20< 8> 6< 70草地 / 泥土
白公牛0.01> 20≤ 1> 8< 70草地 / 泥土
灰狼0.075> 40—> 8< 100草地 / 泥土
郊狼0.075> 40> 8< 8< 100沙地 / 草地
棕熊0.1> 40≥ 8≥ 8< 110草地 / 泥土
黑熊0.1> 40≤ 7—< 120草地 / 泥土
北极熊0.1-40 ~ 100≤ 1—< 80雪 / 冰
马0.05> 20> 8> 6< 80草地 / 泥土
骆驼0.05> 20> 8< 4< 80沙地
驴0.05> 20中—< 120草地 / 泥土
长颈鹿0.03> 20> 8> 8< 75草地 / 泥土
犀牛0.03> 40> 8> 8< 75草地 / 泥土
老虎0.025> 40—> 8< 80草地 / 泥土
白虎0.02> 40≤ 1—< 90岩石 / 草地
狮子0.04> 40> 8—< 80沙地
美洲虎0.03> 40> 8> 8< 100草地 / 岩石
豹0.03> 40> 8—< 120草地 / 岩石
斑马0.05> 20> 8> 8< 80草地 / 泥土
角马0.05> 20> 8—< 80草地 / 泥土
驯鹿0.05—≤ 1—< 90草地 / 泥土
驼鹿0.1—< 8—< 90草地 / 泥土
野牛0.1—≤ 1< 8< 80草地 / 泥土
鸵鸟0.05> 20> 8< 4< 75沙地
鹤鸵0.05> 20> 8中等< 75草地 / 泥土
鬣狗0.05> 40> 8—< 80沙地 / 草地
鸽子1.5—中高———
麻雀1.5—中高———

鸽子和麻雀的适生度高达 1.5,远超其他陆生生物(多数在 0.03-0.1),这就是为什么你总能看到鸟。

棕牛、黑牛、白公牛三种牛的分布由温度和湿度决定:热而湿润的地方出棕牛,冷而湿润的地方出黑牛,极寒且潮湿的地方出稀有的白公牛(适生度仅 0.01)。

马的生成模板有颜色变体,外观随机:黑色 35%、枣红色 50%、栗色 50%、帕洛米诺色(高温地区 30%)、白色(低温地区 30%)。温度影响马的颜色分布——高温地区多深色马,低温地区多白马。

洞穴生成 ​

洞穴生物属于非持续生成(随机生成),生成在黑暗的地下环境中。下方方块必须是洞穴类方块才会通过检查。

生物适生度脚下方块要求额外条件生成模板
洞穴熊1.0洞穴石 / 洞穴苔石 / 洞穴岩石 / 洞穴沙 / 泥土 / 沙子无50% 黑熊 + 50% 棕熊
洞穴虎0.25同上无老虎
洞穴狮0.25同上温度 > 8、湿度 ≤ 7狮子
洞穴美洲虎0.5同上无美洲豹
洞穴豹0.25同上无豹子
洞穴鬣狗1.0同上温度 > 8鬣狗

洞穴熊比洞穴虎常见 4 倍(适生度 1.0 vs 0.25)。洞穴熊的生成模板随机选黑熊或棕熊外观,所以洞穴里的熊可能长得不一样。

所有洞穴生物都要求脚下踩着洞穴类方块(洞穴石、洞穴苔石、洞穴岩石、洞穴沙)或普通泥土/沙子。这意味着在人工挖的矿井里(脚下是普通石头)不会生成洞穴生物,只有天然洞穴里才会。

水域生成 ​

生物适生度生成条件
公牛鲨0.4近海(距岸 < -2)
虎鲨0.3较深海(距岸 < -5)
大白鲨0.2深海(距岸 < -20)
梭鱼0.5近海
海鲈鱼1.0近海
淡水鲈鱼1.0远海内陆、温度不太低
鳐鱼1.0 / 0.5近海 1.0,远海 0.5
食人鱼1.0内陆水域、有湿度、温度高
虎鲸0.05 / 0.01远海 0.05,近海 0.01
白鲸0.05 / 0.01同虎鲸

距岸为负值表示在海洋深处。越深的海洋越容易生成大型海洋掠食者,而近岸区域小型鱼类更多。

夜间常量生成 ​

夜间常量生成需要天空光照强度 < 0.1(几乎全黑)。这是持续生成——每帧检查,条件满足就立即生成,没有冷却间隔。

生物适生度距岸温度湿度海拔光照脚下方块生成模板
灰狼2.0> 40—> 8< 100≤ 7草地 / 泥土灰狼
郊狼2.0> 40> 8< 8< 100≤ 7沙地 / 草地郊狼
棕熊0.5> 40≥ 8≥ 8< 110≤ 7草地 / 泥土棕熊
黑熊0.5> 40≤ 7—< 120≤ 7草地 / 泥土黑熊
北极熊0.25-40 ~ 100≤ 1—< 90≤ 7雪 / 冰⚠️ 黑熊(应为北极熊)
老虎0.05> 40—> 8< 80≤ 7草地 / 泥土老虎
狮子0.25> 40> 8—< 80≤ 7沙地狮子
美洲豹0.25> 40> 8> 8< 100≤ 7草地 / 岩石美洲豹
豹子0.25> 40> 8—< 120≤ 7草地 / 岩石豹子
鬣狗1.0> 40> 8—< 80≤ 7沙地 / 草地鬣狗

夜间常量生成的适生度普遍比白天随机生成高很多(如灰狼白天 0.075 vs 夜间 2.0,差了 27 倍),这就是为什么夜间危险生物会突然变多。

灰狼和郊狼的夜间适生度高达 2.0,是夜间最常见的掠食者。鬣狗 1.0 次之。熊类 0.5 中等。老虎 0.05 最低——夜间遇到老虎比遇到狼难 40 倍。

已知 bug:夜间北极熊使用了黑熊模型 ​

在源码 SubsystemCreatureSpawn.cs 中,夜间北极熊的 SpawnFunction 硬编码调用了 "Bear_Black" 模板而非 "Bear_Polar":

夜间北极熊→应调用Bear_Polar 模板\text{夜间北极熊} \xrightarrow{\text{应调用}} \text{Bear\_Polar 模板}

实际调用→bugBear_Black 模板\text{实际调用} \xrightarrow{\text{bug}} \text{Bear\_Black 模板}

这意味着夜间生成的北极熊外观是黑熊,白天正常。推测是开发时从黑熊代码复制粘贴后忘记修改模板名。此 bug 仅影响外观模型,不影响生成条件和行为逻辑。

生物生成过程 ​

生物出生时的定位非常精确:

出生位置={x=方块中心+随机偏移(0.4,0.6)y=方块顶部+1.1z=方块中心+随机偏移(0.4,0.6)\text{出生位置} = \begin{cases} x = \text{方块中心} + \text{随机偏移}(0.4, 0.6) \\ y = \text{方块顶部} + 1.1 \\ z = \text{方块中心} + \text{随机偏移}(0.4, 0.6) \end{cases}

生物出生时的朝向完全随机(0 到 360 度)。

批量生成时,每个物种最多尝试 50 次找到合适位置,群体成员的分布范围:

  • 水平偏移:±8 格
  • 垂直偏移:-4 到 +8 格

生物消失机制 ​

消失触发 ​

当生物距离所有玩家都超过 60 区块(960 格)时,就会触发消失:

  1. 系统保存该生物的数据到所在区块中
  2. 标记开始消失的时间
  3. 两秒后正式移除实体

生物消失不是永久删除,而是把数据保存在区块里。你离开再回来时,它们会被重新加载出来。

消失过程 ​

阶段说明持续时间
保存数据将生物状态写入区块数据瞬间
触发消失标记消失开始时间瞬间
渐进消失等待移除2 秒

游戏模式与季节的影响 ​

游戏模式影响 ​

模式对生成的影响
创造不影响生成参数
无害生物不会主动攻击玩家,但生成数量不变
生存正常生成
挑战夜间常量生成上限从 6 提升到 12(翻倍)
残酷同挑战,但死亡后不能重生
冒险特殊模式

季节影响 ​

季节随机生成间隔说明
夏/秋/春60 秒正常频率
冬季120 秒频率减半

季节还通过间接方式影响夜间生成:只有天空光足够暗时才触发夜间常量生成。冬季昼短夜长,夜间生成时间更长。两个效应叠加——冬季白天生物少但夜晚危险生物更多。

环境行为模式 ​

模式效果
动态生态(默认)正常生成生物
静态环境完全不生成新生物

在世界选项中将环境行为设为"静态"可以完全关闭生物生成,适合只想建造的玩家。

写给开发者 ​

开发者概览

如果你计划开发模组或修改生成机制,以下技术细节将帮助你快速理解系统架构,避免踩坑。

核心文件索引 ​

文件职责
SubsystemCreatureSpawn.cs生物生成主循环、适生度计算、种群限制
SubsystemSpawn.cs区块级激活/取消激活、实体保存/加载
ComponentCreature.cs生物组件(ConstantSpawn、Category)
ComponentSpawn.cs生成/消失组件(AutoDespawn、SpawnTime)
CreatureCategory.cs生物分类枚举
SpawnLocationType.cs生成位置类型
EnvironmentBehaviorMode.cs环境行为模式
WorldSettings.cs世界设置

关键常量速查表 ​

常量值文件位置
m_totalLimit26SubsystemCreatureSpawn.cs
m_areaLimit3SubsystemCreatureSpawn.cs
m_areaRadius16SubsystemCreatureSpawn.cs
m_totalLimitConstant6SubsystemCreatureSpawn.cs
m_totalLimitConstantChallenging12SubsystemCreatureSpawn.cs
m_areaLimitConstant4SubsystemCreatureSpawn.cs
m_areaRadiusConstant42SubsystemCreatureSpawn.cs
m_populationReductionConstant0.25SubsystemCreatureSpawn.cs
SpawnRadius48 区块SubsystemSpawn.cs
DespawnRadius60 区块SubsystemSpawn.cs
MaxChunkAge76800SubsystemSpawn.cs

模组扩展点 ​

SubsystemCreatureSpawn 支持从 XML 读取自定义生成规则,通过 StandardCreatureSpawnRule 定义自定义生物的生成条件(温度、湿度、海岸距离、上方方块等)。

生成流程图 ​

SubsystemCreatureSpawn.Update()
    │
    ├── 新激活区块 → SpawnChunkCreatures(chunk, 10, false)
    │     └── 随机生成:检查全局<26 + 区域<3(16格半径)
    │         └── GetRandomChunkSpawnPoint() ×5
    │             └── ProcessSpawnPoint() → TestSpawnPoint()
    │                 └── CalculateSpawnSuitability() > 0
    │                     └── GetRandomWeightedItem() 加权选择
    │                         └── SpawnCreature()
    │
    ├── 已激活区块 → SpawnChunkCreatures(chunk, 2, true)
    │     └── 常量生成:检查全局<6/12 + 区域<4(42格半径)
    │         └── 需要 SkyLightIntensity < 0.1
    │
    └── 随机生成 → SpawnRandomCreature()
          └── 检查全局<26 + 68格内<52
              └── GetRandomSpawnPoint() ×10
                  └── 同上流程
参与共建发现错误或有建议?两种零门槛方式,无需本地环境

玩家共建文档 · 原版、插件版、联机版与插件联机版请注意区分