匿名
未登录
创建账号
登录
Mindustry中文wiki
搜索
查看“JSON模组教程-炮塔与DrawPart”的源代码
来自Mindustry中文wiki
命名空间
页面
讨论
更多
更多
页面操作
阅读
查看源代码
历史
←
JSON模组教程-炮塔与DrawPart
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于这些用户组的用户执行:
管理员
、editor
您可以查看和复制此页面的源代码。
<span id="炮塔与-drawpart"></span> = 炮塔与 DrawPart = 炮塔是 Mindustry 战斗系统的核心。无论是吃物品弹药的炮塔,还是用液体或电力驱动的炮塔,本质上都遵循同一套流程:搜敌、对准、装填、开火。你在 JSON 里配置的字段,最终会影响这条流程的每个环节。原版里“冰雹”“蓝瑟”“齐射”“海啸”“熔毁”等属于不同类型的炮塔,但它们的底层字段组织方式高度一致。 == 炮塔的基础流程 == 炮塔会在 <code>range</code> 指定的范围内寻找目标,是否能锁定空中、地面或建筑由 <code>targetAir</code>、<code>targetGround</code>、<code>targetBlocks</code> 决定。<code>trackingRange</code> 可以让炮塔更早锁定目标但不立即开火,适合做“预热型”武器。装填节奏由 <code>reload</code> 决定(单位是刻),数值越小,射速越高。<code>shootCone</code> 是“允许开火的角度偏差”,偏差越大越容易开火但命中率可能更差。<code>inaccuracy</code> 与 <code>velocityRnd</code> 则用于制造散射,前者是角度误差,后者是速度波动。 对远程或曲射炮塔来说,<code>minRange</code> 很关键。它规定了“最小射程”,用于迫击炮或超远程炮塔,避免近距离自伤或误击,同时还能让 AI 产生更合理的站位。配合 <code>drawMinRange</code>,你可以在建造预览中显示内圈范围,减少玩家的“误布置”。子弹里也有 <code>minRangeChange</code>,它会在 UI 上修正最小射程,适合做“不同弹药不同安全距离”的设计。 <code>predictTarget</code> 默认开启,炮塔会根据目标速度提前量射击。如果你给炮塔加了 <code>shoot.firstShotDelay</code> 或充能延迟,建议配合 <code>accurateDelay</code>,否则炮塔可能会用“当前的位置”去预测“未来的目标”,导致明显的落空。还有一组和充能相关的开关:<code>moveWhileCharging</code> 与 <code>reloadWhileCharging</code> 控制炮塔在充能时是否允许移动或继续装填,这些细节会直接影响“有蓄力的武器”在实战中的节奏。 射击点位也会影响表现。<code>shootX</code>/<code>shootY</code> 决定子弹从炮塔贴图的哪个位置出射,<code>xRand</code> 会给射击点带来水平随机偏移,配合 <code>inaccuracy</code> 能做出“散射武器”。声音方面,<code>shootSoundVolume</code> 与 <code>soundPitchMin/Max</code> 可以微调射击质感,让高射速武器听起来不至于刺耳。对于多管炮塔,合理设置 <code>ammoEjectBack</code> 可以让弹壳喷出位置更合理,减少“弹壳从炮口飞出”的违和感。 目标选择也有细节。<code>targetBlocks</code> 控制是否攻击建筑,<code>targetUnderBlocks</code> 用来避免把传送带、桥等“下层建筑”当作主要目标;<code>targetHealing</code> 会把友方建筑视为修复目标,适合修复类炮塔。更复杂的筛选(如 <code>unitFilter</code>、<code>buildingFilter</code>)是函数类型,JSON 无法直接写,只能在 JS/Java 里实现。 热量与视觉反馈由 <code>recoil</code>、<code>recoilTime</code>、<code>cooldownTime</code>、<code>shake</code> 等字段决定,它们不会直接改变伤害,但会影响“射击手感”。声音相关字段包括 <code>shootSound</code>、<code>chargeSound</code>、<code>loopSound</code>,其中 <code>chargeSound</code> 常用于“有首次延迟的武器”,<code>loopSound</code> 适合持续开火类炮塔。 <span id="弹药体系物品液体与电力"></span> == 弹药体系:物品、液体与电力 == <code>ItemTurret</code> 通过 <code>ammoTypes</code> 把物品映射到子弹类型。键是物品内部名,值是子弹对象。每个子弹都带有 <code>ammoMultiplier</code>,它决定“消耗一个物品能转化成多少弹药单位”。<code>maxAmmo</code> 是弹药容量上限,<code>ammoPerShot</code> 是单次射击消耗,<code>consumeAmmoOnce</code> 则控制“一次射击是否只消耗一次弹药”(常用于散射型武器)。这些字段组合起来,能精确控制弹药经济。 <code>LiquidTurret</code> 的逻辑与 <code>ItemTurret</code> 相似,只是弹药来源变成液体。容量字段是 <code>liquidCapacity</code>,它决定液体缓冲上限。液体弹药的消耗以“当前液体”计算,并按子弹的 <code>ammoMultiplier</code> 换算:如果 <code>ammoMultiplier = 2</code>,每次射击只消耗 <code>1/2</code> 单位液体。<code>extinguish</code> 决定是否优先灭火,这也是液体炮塔经常“打火不打人”的原因。 <code>PowerTurret</code> 不需要弹药,直接通过 <code>shootType</code> 指定固定子弹。耗电写在 <code>consumes.power</code> 或 <code>consumes.powerBuffered</code> 中,前者表示持续耗电,后者表示从电力缓冲中抽取。若你想让炮塔有明显“充能感”,可以用 <code>shoot.firstShotDelay</code> 配合 <code>chargeSound</code> 与子弹的 <code>chargeEffect</code>。 弹药相关的视觉反馈也可以调。<code>ammoUseEffect</code> 控制“消耗弹药时”的特效,<code>ammoEjectBack</code> 会影响弹壳喷出的位置;如果你做的是“重炮”或“炮塔机枪”,这类细节能让手感更有区分度。<code>displayAmmoMultiplier</code> 决定数据库面板是否显示弹药倍率,对新手向模组来说很重要,能避免玩家误解“同一炮塔为什么弹药效率差这么多”。 下面是一个最小的物品炮塔示例: '''文件:content/blocks/tutorial-turret.json''' <pre>{ "type": "ItemTurret", "name": "示例炮塔", "description": "使用铜和石墨作为弹药。", "size": 2, "range": 120, "reload": 30, "rotateSpeed": 8, "requirements": [ "copper/90", "lead/60" ], "ammoTypes": { "copper": { "type": "BasicBulletType", "speed": 2.5, "damage": 10, "lifetime": 60 }, "graphite": { "type": "BasicBulletType", "speed": 3.2, "damage": 20, "lifetime": 55, "ammoMultiplier": 4 } } } </pre> 这个例子里,“铜”使用默认 <code>ammoMultiplier</code>,而“石墨”设置为 4,意味着同样的物品数量能提供更多弹药单位。<code>range</code> 与子弹的 <code>speed * lifetime</code> 共同决定最终射程,如果子弹寿命太短,即使 <code>range</code> 很大也打不到那么远。 == 子弹类型的关键字段 == <code>BulletType</code> 决定了“这一发子弹如何表现”。<code>speed</code> 与 <code>lifetime</code> 决定飞行距离,<code>damage</code> 是基础伤害,<code>splashDamage</code> 与 <code>splashDamageRadius</code> 用于范围伤害。<code>pierce</code> 与 <code>pierceCap</code> 控制穿透,<code>knockback</code> 影响击退。<code>status</code> 与 <code>statusDuration</code> 用于附加状态效果(如“燃烧”“电击”),需要与你在状态章节里定义的状态名对应。 如果需要导弹、激光或持续伤害,可以把 <code>type</code> 改成 <code>MissileBulletType</code>、<code>LaserBulletType</code>、<code>ContinuousLaserBulletType</code> 等子类。导弹常用 <code>homingPower</code> 与 <code>weaveMag</code>,激光则常用 <code>length</code>、<code>width</code>、<code>colors</code>,持续激光还会使用 <code>chargeEffect</code> 与 <code>smokeEffect</code> 来塑造表现。配置时建议先从原版炮塔中抄一个相近的子弹,再逐步调整参数。 子弹还有一些“影响炮塔数值”的字段,例如 <code>rangeChange</code> 会在统计面板中改变炮塔的显示射程,<code>ammoMultiplier</code> 会改变弹药效率。这些字段不仅影响战斗表现,也会影响玩家对炮塔的理解,所以需要和炮塔的定位保持一致。 == 开火节奏与射击模式 == 除了基础的 <code>reload</code>,炮塔的开火节奏还受 <code>shoot</code> 子对象影响。<code>shoot</code> 本质上是 <code>ShootPattern</code>,它决定“一次射击”到底发射几发、间隔多久、散布多宽。最常用的字段是 <code>shots</code>(单次射击的发数)、<code>shotDelay</code>(连发之间的间隔)、<code>firstShotDelay</code>(首发延迟)与 <code>spread</code>(散射角度)。你可以用它来做“短促爆发”或“延迟蓄力”型炮塔,而不用修改子弹本身。 另一组容易被忽略的节奏字段是 <code>shootWarmupSpeed</code>、<code>minWarmup</code>、<code>warmupMaintainTime</code> 与 <code>linearWarmup</code>。它们控制“预热条”的上升速度、最低开火阈值与保持时间,适合做“越打越快”的持续火力或“必须蓄满才能开火”的高能武器。预热值不仅影响射击,还会驱动 DrawPart 的 <code>warmup</code> 进度,因此如果你的炮塔有明显的充能动画,记得让预热参数与动画节奏一致。 射程也不仅仅由 <code>range</code> 决定。炮塔会以 <code>range</code> 作为搜索与锁定的上限,但子弹能否飞到目标还取决于 <code>speed * lifetime</code>。如果你遇到“显示射程很远但打不到”的情况,优先检查子弹寿命;如果“显示射程很短但实际打得很远”,可能是子弹的 <code>rangeChange</code> 或 <code>lifetime</code> 与 <code>speed</code> 组合过高。 在原版中,“冰雹”“齐射”属于典型的物品炮塔,“海啸”是液体炮塔,“蓝瑟”“熔毁”则是电力炮塔。你可以把这些作为参考:物品炮塔更强调弹药经济,液体炮塔更强调持续供给,电力炮塔则更依赖电网稳定性。 == 弹药与物流的实际影响 == 很多玩家低估了弹药系统对生产链的影响。<code>maxAmmo</code> 决定炮塔的“弹药缓冲”,它直接影响你需要多快补给;<code>ammoPerShot</code> 决定单次射击的成本;<code>ammoMultiplier</code> 则决定“单个物品到底能提供多少弹药单位”。这些字段加在一起,决定了“一个传送带是否能喂饱炮塔”。如果你希望炮塔更像“持续火力”,就应当提高 <code>ammoMultiplier</code> 或降低 <code>ammoPerShot</code>;如果你希望它成为“高爆发、低持续”,就可以反过来设置。 液体炮塔在物流上更复杂,因为液体的管网容易堵塞,也更容易因为混液导致效率下降。设计液体炮塔时,建议明确输入液体类型,并通过 <code>ammoTypes</code> 限制可用液体,这样玩家的管道布局会更清晰。电力炮塔的难点则是“能量峰值”:高 <code>reload</code> 的炮塔更像“持续耗电”,低 <code>reload</code> 且高伤害的炮塔则会产生“瞬时耗电峰值”,需要更多电池来平滑波动。 <span id="模组示例饱和火力-3.3.0-的电力炮塔"></span> == 模组示例:饱和火力 3.3.0 的电力炮塔 == “饱和火力 3.3.0”里的“丁达尔”是一门典型的 <code>PowerTurret</code>。它使用 <code>shoot</code> 的 <code>ShootBarrel</code> 模式来模拟多管齐射,<code>shootType</code> 则直接定义子弹类型,并在子弹上配置了 <code>hitEffect</code>、<code>despawnEffect</code> 与 <code>trail</code>。下面是该炮塔的部分字段节选,你可以看到 <code>shoot</code> 与 <code>shootType</code> 的组合方式: <pre>{ "type": "PowerTurret", "name": "丁达尔", "reload": 12, "shoot": { "type": "ShootBarrel", "shots": 12, "shotDelay": 4, "barrels": [ 5.5, 22.25, 0, -5.5, 22.25, 0, 16, 21.25, 0, -16, 21.25, 0 ] }, "shootType": { "type": "BasicBulletType", "damage": 106, "speed": 22, "lifetime": 25, "pierce": true, "trailLength": 50 }, "consumes": { "power": 80, "coolant": { "amount": 2, "optional": true } } }</pre> 这个例子体现了“电力炮塔 + 冷却液”的常见组合:电力是主输入,冷却液作为可选加速。对于高射速、多发数的炮塔来说,这种配置能在不强制液体管网的前提下提供上限提升。 <span id="模组示例饱和火力-3.3.0-的物品炮塔"></span> == 模组示例:饱和火力 3.3.0 的物品炮塔 == “电极”是一门 <code>ItemTurret</code>,它通过 <code>ammoTypes</code> 定义不同弹药对应的 <code>EmpBulletType</code>。你会发现它不仅设置了伤害与速度,还在子弹里塞入了 <code>chargeEffect</code> 与 <code>status</code>,这让“弹药类型”同时影响表现与附加状态。下面是其中一段节选: <pre>{ "type": "ItemTurret", "name": "电极", "ammoPerShot": 2, "shoot": { "type": "ShootPattern", "firstShotDelay": 20 }, "ammoTypes": { "copper": { "type": "EmpBulletType", "speed": 14, "lifetime": 18, "status": "阳电", "statusDuration": 180, "chargeEffect": { "type": "MultiEffect", "effects": [ {"type": "ParticleEffect", "particles": 13}, {"type": "ParticleEffect", "particles": 1} ] } } } }</pre> 这个片段展示了“弹药类型改变武器效果”的思路。你可以把它理解为“同一门炮塔,弹药决定玩法”,这在设计多用途炮塔时非常有效。 == 冷却与效率 == 很多炮塔都可以通过冷却液提升射速。JSON 中通常写 <code>consumes: { coolant: { liquid: "water", amount: 0.1 } }</code>,这会被解析成 <code>ConsumeCoolant</code>。<code>coolantMultiplier</code> 决定冷却的加速效率,数值越大,冷却效果越明显。需要注意的是,冷却并不是“无限叠加”,它只是加速装填或降低热量,因此在极高射速下仍会被 <code>reload</code> 的下限限制。 如果你把 <code>coolantMultiplier</code> 设得非常高,又把 <code>cooldownTime</code> 设得很短,炮塔可能会出现“热量几乎不显示”的情况,玩家对射击节奏的感知会变弱。适当保留一点热量衰减时间,反而能让武器更有存在感。 部分炮塔还会使用热量机制(<code>heatRequirement</code>、<code>maxHeatEfficiency</code>),这类炮塔通常需要与热源或热能方块配合。JSON 可以写这些字段,但实际热量来源大多来自特定方块或环境,所以没有配套系统时写了也不会起效。 <span id="drawpart-与炮塔绘制"></span> == DrawPart 与炮塔绘制 == 炮塔的绘制由 <code>drawer</code> 控制,默认是 <code>DrawTurret</code>。如果你需要更复杂的动画或多层结构,可以在 <code>drawer</code> 里使用 <code>parts</code> 配置 <code>DrawPart</code>。最常用的是 <code>RegionPart</code>,它会在原炮塔基础上叠加一张贴图,并根据进度位移或旋转。 <code>RegionPart</code> 的关键字段包括 <code>suffix</code>(贴图后缀)、<code>moveX</code>/<code>moveY</code>/<code>moveRot</code>(位移与旋转)、<code>mirror</code>(左右镜像)、<code>heatColor</code>/<code>heatProgress</code>(热量颜色与进度)。<code>progress</code> 决定动画驱动来源,例如 <code>warmup</code>、<code>recoil</code>、<code>reload</code> 等。<code>PartProgress</code> 还支持简单运算组合,例如用 <code>mul</code> 让某个部件动作幅度更小,用 <code>add</code> 把两个进度叠加成“复合动画”。 示例:给炮塔加一个会随预热移动的部件。 <pre>"parts": [ { "type": "RegionPart", "suffix": "-barrel", "moveY": -1.5, "progress": "warmup" } ]</pre> “饱和火力 3.3.0”的“扩散轨道炮”展示了更复杂的部件组合。它让一个部件跟随 <code>recoil</code> 回弹,另一个用 <code>warmup</code> 做“充能核心”,再用 <code>HaloPart</code> 把 <code>reload</code> 变成“几何光环”。你可以在自己的炮塔上复用这种“多进度驱动”的思路: <pre>"drawer": { "type": "DrawTurret", "parts": [ { "type": "RegionPart", "suffix": "-中", "progress": "recoil", "heatProgress": "recoil", "moveY": -10, "under": true }, { "type": "ShapePart", "progress": "warmup", "y": -24, "circle": true, "radiusTo": 6 }, { "type": "HaloPart", "progress": "reload", "y": -24, "radius": 10, "radiusTo": 0, "strokeTo": 0.1 } ] }</pre> 这类组合的关键不是“堆特效”,而是让不同的战斗节奏对应不同的视觉反馈:回弹、充能、装填,各自有各自的动画驱动,玩家才能一眼读懂炮塔状态。 如果你发现部件位置不对,优先检查贴图命名是否正确,再调整 <code>moveX</code>/<code>moveY</code> 的偏移。DrawPart 的组合能力很强,但也最容易“走形”,建议先复刻原版,再做个性化修改。 == 小结 == 炮塔配置的核心在于“射程与节奏”“弹药与效率”“表现与手感”。当这些层面都匹配时,即使是最简单的 <code>BasicBulletType</code> 也能做出很有个性的炮塔。
返回
JSON模组教程-炮塔与DrawPart
。
导航
导航
首页
塞普罗
-- 战役区块
---- 零号地区
------ 地区介绍
------ 目标列表
---- 冰冻森林
------ 地区介绍
---- 陨石带
------ 地区介绍
---- 遗迹海岸
------ 地区介绍
---- 生物质合成区
------ 地区介绍
---- 风吹群岛
------ 地区介绍
---- 绵延群山
------ 地区介绍
---- 真菌通道
------ 地区介绍
---- 盐碱荒滩
------ 地区介绍
---- 工业区 32M
------ 地区介绍
---- 菌疫峡谷
------ 地区介绍
---- 边陲哨站
------ 地区介绍
---- 增生区
------ 地区介绍
---- 焦油田
------ 地区介绍
---- 边际海湾
------ 地区介绍
---- 核裂阵
------ 地区介绍
---- 污染丛林
------ 地区介绍
---- 边海港口
------ 地区介绍
---- 冲击区0078
------ 地区介绍
---- 实验禁区
------ 地区介绍
---- 海军要塞
------ 地区介绍
---- 萃取前哨
------ 地区介绍
---- 菌丝堡垒
------ 地区介绍
---- 荒芜裂谷
------ 地区介绍
---- 沉没码头
------ 地区介绍
---- 风化海峡
------ 地区介绍
---- 环礁群岛
------ 地区介绍
---- 行星发射终端
------ 地区介绍
---- 赤色总部
------ 地区介绍
---- 熔石要塞
------ 地区介绍
-- 物品
---- 铜
---- 铅
---- 钢化玻璃
---- 石墨
---- 沙
---- 煤炭
---- 钛
---- 钍
---- 废料
---- 硅
---- 塑钢
---- 相织布
---- 巨浪合金
---- 孢子荚
---- 爆炸混合物
---- 硫化物
-- 液体
---- 水
---- 矿渣
---- 石油
---- 冷冻液
-- 建筑
---- 炮台
------ 分裂
------ 火焰
------ 冰雹
------ 波浪
------ 蓝瑟
------ 电弧
------ 差扰
------ 蜂群
------ 齐射
------ 裂解
------ 海啸
------ 雷光
------ 浪涌
------ 气旋
------ 厄兆
------ 幽灵
------ 熔毁
---- 钻头
------ 机械钻头
------ 气动钻头
------ 激光钻头
------ 爆破钻头
------ 抽水机
------ 培养机
------ 石油钻井
---- 物品运输设施
------ 传送带
------ 钛传送带
------ 塑钢传送带
------ 装甲传送带
------ 交叉器
------ 传送带桥
------ 相织布传送带桥
------ 分类器
------ 反向分类器
------ 路由器
------ 分配器
------ 溢流门
------ 反向溢流门
------ 装卸器
------ 质量驱动器
---- 流体设施
------ 机械泵
------ 回转泵
------ 脉冲泵
------ 导管
------ 脉冲导管
------ 电镀导管
------ 流体路由器
------ 流体容器
------ 流体储罐
------ 流体交叉器
------ 导管桥
------ 相织布导管桥
---- 电力设施
------ 电力节点
------ 大型电力节点
------ 巨浪电力塔
------ 二极管
------ 电池
------ 大型电池
------ 火力发电机
------ 热能发电机
------ 涡轮发电机
------ 温差发电机
------ RTG 发电机
------ 太阳能板
------ 大型太阳能板
------ 钍反应堆
------ 冲击反应堆
---- 墙
------ 铜墙
------ 大型铜墙
------ 钛墙
------ 大型钛墙
------ 塑钢墙
------ 大型塑钢墙
------ 钍墙
------ 大型钍墙
------ 相织布墙
------ 大型相织布墙
------ 合金墙
------ 大型合金墙
------ 门
------ 大门
------ 废墙
------ 大型废墙
------ 巨型废墙
------ 超巨型废墙
------ 推进器残骸
---- 工厂
------ 石墨压缩机
------ 多重压缩机
------ 硅冶炼厂
------ 热能坩埚
------ 窑炉
------ 塑钢压缩机
------ 相织布编织器
------ 合金冶炼厂
------ 冷冻液混合器
------ 硫化物混合器
------ 爆炸物混合器
------ 熔炉
------ 分离机
------ 解离机
------ 孢子压缩机
------ 粉碎机
------ 煤炭离心机
------ 焚化炉
---- 兵工厂
------ 陆军工厂
------ 空军工厂
------ 海军工厂
------ 数增级单位重构工厂
------ 倍乘级单位重构工厂
------ 多幂级单位重构工厂
------ 无量级单位重构工厂
------ 维修点
------ 维修塔
------ 载荷传送带
------ 载荷路由器
---- 其他
------ 修理器
------ 修理投影
------ 超速投影
------ 超速穹顶
------ 力墙投影
------ 脉冲地雷
------ 初代核心
------ 次代核心
------ 终代核心
------ 容器
------ 仓库
------ 照明器
------ 发射台
------ 接收台
------ 行星际加速器
---- 逻辑
------ 信息板
------ 开关
------ 微型处理器
------ 逻辑处理器
------ 超核处理器
------ 内存元
------ 内存库
------ 逻辑显示屏
------ 大型逻辑显示屏
------ 逻辑显示单元
-- 单位
埃里克尔
-- 战役区块
---- 始发地区
------ 地区介绍
---- 庇护前哨
------ 地区介绍
---- 岩浆湖
------ 地区介绍
---- 交错丘陵
------ 地区介绍
---- 风化山脉
------ 地区介绍
---- 横断山谷
------ 地区介绍
---- 风蚀盆地
------ 地区介绍
---- 芳油湿地
------ 地区介绍
---- 横垒峰峦
------ 地区介绍
---- 贪湾峡谷
------ 地区介绍
---- 破碎火山
------ 地区介绍
---- 晶石要塞
------ 地区介绍
---- 碳岩裂隙
------ 地区介绍
---- 平行岭谷
------ 地区介绍
---- 十字路口
------ 地区介绍
---- 岩溶洞穴
------ 地区介绍
---- 起源
------ 地区介绍
-- 物品
---- 石墨
---- 沙
---- 钍
---- 硅
---- 相织布
---- 巨浪合金
---- 铍
---- 钨
---- 氧化物
---- 碳化物
-- 液体
---- 水
---- 矿渣
---- 瘤液
---- 芳油
---- 臭氧
---- 氢气
---- 氮气
---- 氰气
-- 建筑
-- 单位
沙盒
-- 建筑
隐藏
-- 物品
-- 液体
-- 建筑
最近更改
随机页面
MediaWiki帮助
wiki工具
wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志