匿名
未登录
创建账号
登录
Mindustry中文wiki
搜索
查看“JSON模组教程-行星、区块、生成器、环境方块”的源代码
来自Mindustry中文wiki
命名空间
页面
讨论
更多
更多
页面操作
阅读
查看源代码
历史
←
JSON模组教程-行星、区块、生成器、环境方块
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于这些用户组的用户执行:
管理员
、editor
您可以查看和复制此页面的源代码。
<span id="行星区块生成器环境方块"></span> = 行星、区块、生成器、环境方块 = 这一节负责“战役与世界”的部分:行星、区块、天气与环境方块。JSON 能做的事情不少,但行星生成器和复杂规则仍建议以原版为参考,尤其是跨行星玩法与地图生成逻辑。 <span id="行星planet"></span> == 行星(Planet) == 行星文件位于 <code>content/planets</code>。行星负责定义“战役大地图”的形态与规则入口。基础字段包括 <code>parent</code>(父天体)、<code>radius</code>(行星半径)、<code>orbitTime</code>/<code>rotateTime</code>(公转/自转周期)、<code>atmosphereColor</code>/<code>lightColor</code>(大气与光照颜色)以及 <code>defaultEnv</code>(默认环境标志)。其中 <code>defaultEnv</code> 影响区块默认环境,例如是否允许氧气、是否启用孢子环境等。 除了视觉参数,行星还有一些影响战役体验的规则字段。<code>startSector</code> 可以指定玩家初始的区块编号;<code>launchCapacityMultiplier</code> 会影响发射时核心携带物资上限;<code>allowLaunchSchematics</code> 和 <code>allowLaunchLoadout</code> 决定玩家是否可以选择发射蓝图与携带物品。它们不会改变地图生成,但会显著影响“进入战役时的节奏”。 行星还决定“默认环境”。<code>defaultEnv</code> 是一组环境标记,会影响氧气、孢子、地面油水等规则是否启用;<code>defaultAttributes</code> 则提供地形属性的基线值。视觉层面上,<code>hasAtmosphere</code> 与 <code>updateLighting</code> 控制是否有大气与昼夜变化,<code>atmosphereRadIn/Out</code> 决定大气层厚度。玩法层面上,<code>clearSectorOnLose</code>、<code>allowSectorInvasion</code>、<code>enemyInfiniteItems</code> 等字段会改变战役难度与节奏,这些都属于“行星级规则”,比单独区块的参数更“宏观”。 需要注意的是,JSON 里目前只会把 <code>generator</code> 反序列化成 <code>AsteroidGenerator</code>。写 <code>SerpuloPlanetGenerator</code> 或 <code>ErekirPlanetGenerator</code> 并不会生效。如果你想复用“塞普罗”或“埃里克尔”的生成器,需要用 Java 或 JavaScript 接管生成器字段。 “饱和火力 3.3.0”就是用脚本来解决生成器限制的。它在 <code>scripts/planets/泰伯利亚.js</code> 中手动创建行星并指定生成器,例如: <pre>const TBLY = new Planet("泰伯利亚", Planets.sun, 1, 3.3); TBLY.generator = extend(SerpuloPlanetGenerator, { getDefaultLoadout() { return Schematics.readBase64("bXNjaAF4nA3JMQ6AIBAAwQXFRr9i4XuMBR5XkCAYkP9LphwcbmLO/lHMwRq0SY3vF0sGluRvTQ17XoZNStU9d0na20gDduAHAc0Org=="); } });</pre> 这个片段说明了“行星生成器只能靠脚本”这一点:JSON 负责静态字段,生成器与规则则由 JS 或 Java 接管。 '''文件:content/planets/tutorial-planet.json''' <pre>{ "name": "示例行星", "parent": "sun", "radius": 1, "orbitTime": 60, "rotateTime": 30, "atmosphereColor": "7db6ff", "lightColor": "ffd37f" } </pre> 这个例子只设置了最基本的轨道与颜色参数,适合快速验证行星是否能被正确加载。 == 行星与科技树关系 == 行星不仅是“背景”,还决定战役科技树的展示与解锁方式。<code>techTree</code> 与 <code>autoAssignPlanet</code> 让原版内容在不同星球下有不同的解锁顺序。你在 JSON 里新增的方块或单位,如果没有明确指定研究位置,可能会跟随默认行星显示,导致玩家在不合适的阶段就能解锁。解决办法要么是在内容上设置合适的 <code>research</code>,要么在行星层面控制哪些内容在该星球可用。 还有一些与发射相关的字段,例如 <code>allowLaunchSchematics</code> 和 <code>allowLaunchLoadout</code>,它们决定玩家是否可以带蓝图与物资进入区块。对战役节奏影响很大:允许蓝图会让玩家更快建立基地,禁止蓝图则会强化“开局规划”的重要性。你可以把它当作一种“难度调节器”。 行星的“可见性与入口”也值得关注。<code>visible</code> 与 <code>accessible</code> 决定它是否出现在行星列表中,<code>iconColor</code> 与 <code>launchMusic</code> 影响 UI 体验;<code>defaultCore</code> 会影响发射时默认核心类型,<code>allowCampaignRules</code> 决定玩家能否在行星界面调整规则。这些字段偏 UI 与流程,但对战役体验影响很直接。 <span id="区块sectorpreset"></span> == 区块(SectorPreset) == 区块文件位于 <code>content/sectors</code>。每个区块必须指定 <code>sector</code> 编号,<code>planet</code> 可选。区块对应的地图文件必须放在 <code>maps/<name>.msav</code>,文件名要和 JSON 文件名一致,否则区块不会生成地图。原版的“零号地区”“冰冻森林”“盐碱荒滩”等都是 <code>SectorPreset</code> 的实例。 <code>SectorPreset</code> 的常见字段包括 <code>difficulty</code>(难度 0-10)、<code>captureWave</code>(达到多少波算占领)、<code>startWaveTimeMultiplier</code>(开局波次时间倍率)、<code>addStartingItems</code>(是否提供初始物资)、<code>noLighting</code>(禁用光照)、<code>requireUnlock</code>(是否需要解锁才能登陆)、<code>isLastSector</code>(是否为最终区块)、<code>attackAfterWaves</code>(波次结束后进入攻击模式)。这些字段大多是“规则开关”,不会影响地图本身,但会影响玩家进入后的玩法节奏。 如果你希望某个区块“独立于行星规则”,可以用 <code>overrideLaunchDefaults</code> 并在区块里单独设定 <code>allowLaunchSchematics</code> 与 <code>allowLaunchLoadout</code>。<code>showHidden</code> 控制隐藏区块是否显示名字与图标,适合做彩蛋或剧情节点。<code>requireUnlock</code> 与 <code>shieldSectors</code>(在 JS/Java 中常用)用于限制登陆顺序,避免玩家过早进入高难区块。区块本身无法写复杂 <code>rules</code>,但你可以在 JS/Java 里通过 <code>rules</code> 回调做深度定制。 '''文件:content/sectors/tutorial-sector.json''' <pre>{ "name": "示例区块", "planet": "serpulo", "sector": 15 } </pre> 如果你希望写复杂的波次、敌人行为或特殊胜负条件,通常需要地图脚本或 Java/JS 来实现,JSON 只负责基础的入口与一些通用开关。 == 区块与地图文件的配合 == 区块本身只是“入口”,真正的地图形态由 <code>.msav</code> 文件决定。你可以把区块理解为“战役菜单里的按钮”,而地图文件则是“战场本体”。这也意味着区块的 <code>name</code> 与地图文件名必须严格一致,否则区块会显示但无法进入。若你想做自定义战役,建议先把地图在编辑器里跑通,再回到 JSON 里配置区块参数。 地图文件里还包含波次、规则与脚本等信息,它们对战斗节奏影响比 <code>SectorPreset</code> 更直接。<code>SectorPreset</code> 主要管“能不能进入、入口怎么显示”,而 <code>.msav</code> 才是真正的“关卡设计”。因此当你发现区块规则写了但不生效,优先检查地图本身是否覆盖了规则。 在原版中,很多区块还会设置 <code>requireUnlock</code> 或 <code>showHidden</code>,用于控制玩家在战役地图上看到哪些区域。即使你不写这些字段,默认规则也会生效,但写清楚可以避免“解锁顺序混乱”。 <span id="天气weather"></span> == 天气(Weather) == 天气文件位于 <code>content/weathers</code>。<code>Weather</code> 的核心字段包括 <code>duration</code>(持续时间,单位为刻)、<code>opacityMultiplier</code>(覆盖层不透明度)、<code>sound</code>/<code>soundVol</code>(音效与音量)、<code>status</code>/<code>statusDuration</code>(施加的状态与持续时间)以及 <code>statusAir</code>/<code>statusGround</code>(作用对象)。这些字段决定天气的“强度与范围”。 不同天气子类会有自己的表现参数,例如 <code>RainWeather</code> 关注雨线速度、密度与颜色,<code>ParticleWeather</code> 会关心粒子大小与飘动。大多数情况下,你可以先复刻原版天气,再逐步替换颜色与状态,以保证效果不会过强或过于杂乱。 <span id="模组示例饱和火力-3.3.0-的天气"></span> == 模组示例:饱和火力 3.3.0 的天气 == “电离层异常”是一个 <code>ParticleWeather</code>,它把 <code>statusGround</code> 设为 <code>false</code>,表示只影响空中单位,同时通过 <code>sound</code> 与 <code>soundVol</code> 强化氛围感: <pre>{ "name": "电离层异常", "type": "ParticleWeather", "particleRegion": "circle-small", "color": "c0ecff", "density": 5000, "statusGround": false, "sound": "shootArc", "soundVol": 4, "statusDuration": 3, "status": "unmoving" }</pre> “腐蚀性尘降风”则展示了 <code>attrs</code> 对地形属性的影响,它通过削弱孢子属性来改变生产环境,同时施加状态: <pre>{ "name": "腐蚀性尘降风", "type": "ParticleWeather", "attrs": {"spores": -0.5}, "color": "a0b46e", "density": 3000, "opacityMultiplier": 0.4, "statusDuration": 10, "status": "corroded" }</pre> 这两个例子分别强调了“作用对象”和“属性联动”,也说明天气不仅是视觉特效,更是战役节奏的控制器。 == 天气与状态的联动 == 天气的 <code>status</code> 与 <code>statusDuration</code> 会周期性施加在单位上,且可以区分空中与地面(<code>statusAir</code>/<code>statusGround</code>)。这会导致某些单位“天然吃亏”,例如纯地面单位在持续减速天气里会明显受限,而飞行单位可能几乎不受影响。你在设计天气时需要考虑这一点,否则战役的难度会出现“对某类单位极不友好”的偏差。 天气的 <code>attrs</code> 还可以影响地形属性,例如降低或增加某些属性值,从而间接影响生产方块的效率。虽然这类设计较少见,但在特殊关卡中很有表现力。 另外,<code>opacityMultiplier</code> 会影响覆盖层的可见度,数值太高会让地图过暗、视线压抑;<code>duration</code> 则控制天气维持时间,过短会显得“像闪一下”,过长又会让玩家觉得被强制压制。天气是“节奏控制器”,不是单纯装饰,建议配合波次设计一起调。 <span id="环境方块environment"></span> == 环境方块(Environment) == 环境方块通常位于 <code>content/blocks/environment</code>,常见类型包括 <code>Floor</code>(地板)、<code>OreBlock</code>(矿物)、<code>StaticWall</code>(环境墙)和 <code>Prop</code>(装饰物)。它们的贴图必须放在 <code>sprites/blocks/environment/</code>,否则会触发 <code>Wrong Texture Folder</code>。 <code>Floor</code> 的字段很丰富。<code>speedMultiplier</code> 与 <code>dragMultiplier</code> 会改变单位移动手感,<code>damageTaken</code> 会造成持续伤害,<code>status</code> 与 <code>statusDuration</code> 能让地板“踩上去就中状态”,<code>liquidDrop</code> 与 <code>liquidMultiplier</code> 决定泵类方块的抽取效率。若地板是液体,还会用到 <code>isLiquid</code> 与 <code>overlayAlpha</code> 控制显示效果。<code>variants</code> 决定贴图变体数量,<code>oreScale</code> 与 <code>oreThreshold</code> 则用于矿物的地图生成参数。 除了数值字段,<code>Floor</code> 还有不少“观感型”参数。<code>walkEffect</code> 与 <code>walkSound</code> 可以塑造“踩上去的反馈”,<code>walkSoundPitchMin/Max</code> 用于随机音高避免机械重复;<code>drownTime</code> 会影响单位在深液体中的生存;<code>blendGroup</code> 影响与其他地板的边缘过渡;<code>supportsOverlay</code> 与 <code>needsSurface</code> 则决定能否叠加覆盖层或放置特殊装饰。这些字段不一定提高强度,但会让地形更“有存在感”。 <code>OreBlock</code> 的核心字段是 <code>itemDrop</code> 与 <code>variants</code>,前者决定掉落物,后者决定贴图变体数量。若你需要控制矿物生成密度,通常会调整 <code>oreScale</code> 与 <code>oreThreshold</code>,并结合 <code>oreDefault</code> 来决定是否参与地图默认生成。<code>StaticWall</code> 更关注 <code>health</code>、<code>variants</code> 与破坏音效;<code>Prop</code> 则多用于纯装饰。 '''文件:content/blocks/environment/tutorial-ore.json''' <pre>{ "type": "OreBlock", "name": "示例矿", "itemDrop": "copper", "variants": 3 } </pre> <span id="模组示例饱和火力-3.3.0-的环境方块"></span> == 模组示例:饱和火力 3.3.0 的环境方块 == “铬”矿展示了 <code>oreDefault</code>、<code>oreScale</code> 与 <code>oreThreshold</code> 的组合用法,同时用 <code>playerUnmineable</code> 禁止玩家手动开采,避免早期获取高阶资源: <pre>{ "type": "OreBlock", "name": "铬", "itemDrop": "铬", "playerUnmineable": true, "oreDefault": true, "oreThreshold": 0.9, "oreScale": 20 }</pre> “雪沙”则是一个带属性的地板,它在 <code>attributes</code> 里增加油与水属性,让这类地形在生产效率上更有意义: <pre>{ "type": "floor", "name": "雪沙", "itemDrop": "sand", "speedMultiplier": 0.95, "attributes": {"oil": 0.5, "water": 0.2}, "variants": 2, "playerUnmineable": true }</pre> 这两个例子说明了“环境方块并非只有装饰用途”,它们也可以直接参与生产与战役节奏的塑造。 如果你希望玩家“走上去就能感觉到地形差异”,可以配合 <code>walkEffect</code> 或 <code>walkSound</code>,让移动反馈成为环境设计的一部分。 == 环境方块与地图生成 == 环境方块的 <code>oreScale</code> 与 <code>oreThreshold</code> 并不会直接“生成矿物”,它们只是告诉地图生成器在什么情况下使用该矿。真正的生成逻辑由生成器决定,因此你在 JSON 里设置这些字段之后,只有在对应生成器中引用了该矿,地图里才会出现它。这也是为什么很多自定义矿物“写了却不生成”的原因。 <code>oreDefault</code> 是一个很重要的开关:它决定该矿物是否参与“默认矿物池”。如果你希望它只出现在特定地图,<code>oreDefault</code> 就应该设为 <code>false</code>,然后在地图脚本或生成器里手动引用;否则它可能会在所有地图里随机出现,破坏战役节奏。类似的还有 <code>wallOre</code>,它允许矿物生成在墙体上,常用于“墙矿”或特殊地形,但玩家视角会更难察觉,需要配合明显的贴图。 对于液体地面,<code>liquidDrop</code> 与 <code>liquidMultiplier</code> 会影响泵类方块的效率,也会影响“水洼”扩散。若你希望某种液体地面更有威胁,可以提高 <code>damageTaken</code> 或直接设置 <code>status</code>。这些字段结合起来,能让地面从“背景”变成“机制”。 <span id="生成器generator"></span> == 生成器(Generator) == 行星生成器决定地形、矿物与噪声分布。原版中常见的生成器有 <code>SerpuloPlanetGenerator</code>、<code>ErekirPlanetGenerator</code>、<code>AsteroidGenerator</code>,但 JSON 目前只能反序列化出 <code>AsteroidGenerator</code>。如果你想在 JSON 里“复用原版生成器”,需要用 JS/Java 接管生成器字段,再回到 JSON 配置行星或区块。 区块的生成器则是 <code>FileMapGenerator</code>,它直接读取 <code>.msav</code> 地图文件。因此当你使用自定义区块时,真正影响地形与矿物的是地图文件本身,而不是 JSON 字段。理解这点有助于避免“在 JSON 里调矿物密度却不生效”的困惑。 == 小结 == 行星和区块决定战役的“大地图”,天气与环境方块决定“战场体验”。当你想做更复杂的生成逻辑时,优先参照 Java 教程,再回到 JSON 实现,会少走很多弯路。 如果目标已经超出 JSON 能力,比如自定义生成器或复杂规则,就该直接转向脚本或 Java。 合理使用天气和环境,还能把战役“讲得更像一个世界”。
返回
JSON模组教程-行星、区块、生成器、环境方块
。
导航
导航
首页
塞普罗
-- 战役区块
---- 零号地区
------ 地区介绍
------ 目标列表
---- 冰冻森林
------ 地区介绍
---- 陨石带
------ 地区介绍
---- 遗迹海岸
------ 地区介绍
---- 生物质合成区
------ 地区介绍
---- 风吹群岛
------ 地区介绍
---- 绵延群山
------ 地区介绍
---- 真菌通道
------ 地区介绍
---- 盐碱荒滩
------ 地区介绍
---- 工业区 32M
------ 地区介绍
---- 菌疫峡谷
------ 地区介绍
---- 边陲哨站
------ 地区介绍
---- 增生区
------ 地区介绍
---- 焦油田
------ 地区介绍
---- 边际海湾
------ 地区介绍
---- 核裂阵
------ 地区介绍
---- 污染丛林
------ 地区介绍
---- 边海港口
------ 地区介绍
---- 冲击区0078
------ 地区介绍
---- 实验禁区
------ 地区介绍
---- 海军要塞
------ 地区介绍
---- 萃取前哨
------ 地区介绍
---- 菌丝堡垒
------ 地区介绍
---- 荒芜裂谷
------ 地区介绍
---- 沉没码头
------ 地区介绍
---- 风化海峡
------ 地区介绍
---- 环礁群岛
------ 地区介绍
---- 行星发射终端
------ 地区介绍
---- 赤色总部
------ 地区介绍
---- 熔石要塞
------ 地区介绍
-- 物品
---- 铜
---- 铅
---- 钢化玻璃
---- 石墨
---- 沙
---- 煤炭
---- 钛
---- 钍
---- 废料
---- 硅
---- 塑钢
---- 相织布
---- 巨浪合金
---- 孢子荚
---- 爆炸混合物
---- 硫化物
-- 液体
---- 水
---- 矿渣
---- 石油
---- 冷冻液
-- 建筑
---- 炮台
------ 分裂
------ 火焰
------ 冰雹
------ 波浪
------ 蓝瑟
------ 电弧
------ 差扰
------ 蜂群
------ 齐射
------ 裂解
------ 海啸
------ 雷光
------ 浪涌
------ 气旋
------ 厄兆
------ 幽灵
------ 熔毁
---- 钻头
------ 机械钻头
------ 气动钻头
------ 激光钻头
------ 爆破钻头
------ 抽水机
------ 培养机
------ 石油钻井
---- 物品运输设施
------ 传送带
------ 钛传送带
------ 塑钢传送带
------ 装甲传送带
------ 交叉器
------ 传送带桥
------ 相织布传送带桥
------ 分类器
------ 反向分类器
------ 路由器
------ 分配器
------ 溢流门
------ 反向溢流门
------ 装卸器
------ 质量驱动器
---- 流体设施
------ 机械泵
------ 回转泵
------ 脉冲泵
------ 导管
------ 脉冲导管
------ 电镀导管
------ 流体路由器
------ 流体容器
------ 流体储罐
------ 流体交叉器
------ 导管桥
------ 相织布导管桥
---- 电力设施
------ 电力节点
------ 大型电力节点
------ 巨浪电力塔
------ 二极管
------ 电池
------ 大型电池
------ 火力发电机
------ 热能发电机
------ 涡轮发电机
------ 温差发电机
------ RTG 发电机
------ 太阳能板
------ 大型太阳能板
------ 钍反应堆
------ 冲击反应堆
---- 墙
------ 铜墙
------ 大型铜墙
------ 钛墙
------ 大型钛墙
------ 塑钢墙
------ 大型塑钢墙
------ 钍墙
------ 大型钍墙
------ 相织布墙
------ 大型相织布墙
------ 合金墙
------ 大型合金墙
------ 门
------ 大门
------ 废墙
------ 大型废墙
------ 巨型废墙
------ 超巨型废墙
------ 推进器残骸
---- 工厂
------ 石墨压缩机
------ 多重压缩机
------ 硅冶炼厂
------ 热能坩埚
------ 窑炉
------ 塑钢压缩机
------ 相织布编织器
------ 合金冶炼厂
------ 冷冻液混合器
------ 硫化物混合器
------ 爆炸物混合器
------ 熔炉
------ 分离机
------ 解离机
------ 孢子压缩机
------ 粉碎机
------ 煤炭离心机
------ 焚化炉
---- 兵工厂
------ 陆军工厂
------ 空军工厂
------ 海军工厂
------ 数增级单位重构工厂
------ 倍乘级单位重构工厂
------ 多幂级单位重构工厂
------ 无量级单位重构工厂
------ 维修点
------ 维修塔
------ 载荷传送带
------ 载荷路由器
---- 其他
------ 修理器
------ 修理投影
------ 超速投影
------ 超速穹顶
------ 力墙投影
------ 脉冲地雷
------ 初代核心
------ 次代核心
------ 终代核心
------ 容器
------ 仓库
------ 照明器
------ 发射台
------ 接收台
------ 行星际加速器
---- 逻辑
------ 信息板
------ 开关
------ 微型处理器
------ 逻辑处理器
------ 超核处理器
------ 内存元
------ 内存库
------ 逻辑显示屏
------ 大型逻辑显示屏
------ 逻辑显示单元
-- 单位
埃里克尔
-- 战役区块
---- 始发地区
------ 地区介绍
---- 庇护前哨
------ 地区介绍
---- 岩浆湖
------ 地区介绍
---- 交错丘陵
------ 地区介绍
---- 风化山脉
------ 地区介绍
---- 横断山谷
------ 地区介绍
---- 风蚀盆地
------ 地区介绍
---- 芳油湿地
------ 地区介绍
---- 横垒峰峦
------ 地区介绍
---- 贪湾峡谷
------ 地区介绍
---- 破碎火山
------ 地区介绍
---- 晶石要塞
------ 地区介绍
---- 碳岩裂隙
------ 地区介绍
---- 平行岭谷
------ 地区介绍
---- 十字路口
------ 地区介绍
---- 岩溶洞穴
------ 地区介绍
---- 起源
------ 地区介绍
-- 物品
---- 石墨
---- 沙
---- 钍
---- 硅
---- 相织布
---- 巨浪合金
---- 铍
---- 钨
---- 氧化物
---- 碳化物
-- 液体
---- 水
---- 矿渣
---- 瘤液
---- 芳油
---- 臭氧
---- 氢气
---- 氮气
---- 氰气
-- 建筑
-- 单位
沙盒
-- 建筑
隐藏
-- 物品
-- 液体
-- 建筑
最近更改
随机页面
MediaWiki帮助
wiki工具
wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志