三、单位 units.ini 代码讲解
units.ini 用于定义游戏单位(步兵、载具、空军、海军)。格式与游戏本体 data/units_ini.js 内的 INI 文本完全一致。每个 [节名] 就是一个单位,节名即全局唯一 ID。
3.1 完整示例
以游戏自带的「步枪兵」和一辆自定义坦克为例:
[rifleman] name=步枪兵 desc=便宜好用的基础步兵,克制其它步兵。 kind=infantry hp=110 armor=infantry cost=60 build=3.5 speed=52 rad=5 sight=6 turn=12 weapon=mg from=barracks req= tab=inf art=rifleman key=1 crush=true [cz_flameTank] name=火焰坦克 desc=喷火的装甲单位 kind=vehicle hp=400 armor=light cost=800 build=8 speed=64 rad=10 sight=6 turn=3.0 weapon=cz_flamethrower from=factory req= tab=veh art=cz_flameTank
3.2 单位类型 kind(必填)
| kind | 含义 | 行为 |
|---|---|---|
infantry | 步兵 | 可进驻民房、方向 8 向、行走动画 4 帧 |
vehicle | 载具 | 方向 16 向、可碾压(配合 crush) |
air | 空军 | 空中单位,仅防空武器可打 |
naval | 海军 | 水面舰艇 |
3.3 字段速查
[Unit]>name= (string) — 显示名称。建造列表、说明框显示。
[Unit]>kind= (enum: infantry|vehicle|air|naval) — 必填,单位类别。
决定索敌、进驻、方向帧数等行为。
[Unit]>hp= (int) — 生命值。
步兵约 70-140,载具约 260-650,空军约 100-200。
[Unit]>armor= (enum: infantry|light|heavy|air|naval|sub) — 护甲类型。
决定武器对其的伤害倍率(配合武器
[Unit]>cost= (int) — 造价(信用点)。
vs= 字段)。遭遇战初始资金购买。步兵 60-600,载具 500-2000。
[Unit]>build= (number) — 建造时间(秒)。
从兵营/工厂生产所需时间。
[Unit]>speed= (number) — 移动速度(像素/秒)。
步兵 40-60,载具 40-120。数值越大越快。
[Unit]>rad= (int) — 碰撞半径(像素)。
影响寻路与碰撞判定。步兵 5,载具 9-12。
[Unit]>sight= (int) — 视野(格数)。
视野范围内的地图可被看见(配合迷雾)。
[Unit]>turn= (number) — 转向速度(每秒角度数)。
越大转向越快。载具约 2.6-4.2。
[Unit]>turretTurn= (number) — 炮塔转向速度(可选)。
有独立炮塔的单位使用,如坦克。
[Unit]>weapon= (weaponId) — 主武器。
引用
[Unit]>secondary= (weaponId) — 副武器(可选)。
weapons.ini 里的武器 ID。设为空或省略则无武装。有副武器的单位自动按目标智能选择主/副武器:对目标护甲倍率更高的那把优先,副武器冷却独立。兼容旧字段
[Unit]>secondaryMode= (enum: auto|cooldown|mandatory) — 副武器使用模式(可选)。
secondaryWeapon=(作用相同)。空中单位不使用副武器。auto(默认)按目标护甲智能切换;cooldown 主武器冷却间隙自动打副武器;mandatory 每 secondaryEvery 次主武器射击后强制打一发副武器。如
[Unit]>from= (buildingId) — 生产建筑。
secondaryEvery=4:每 4 发主武器后打一发副武器。步兵
[Unit]>req= (comma-separated) — 科技前置(可选)。
barracks,载具 factory,空军 helipad。需先建造对应建筑才能生产。如
[Unit]>tab= (enum: inf|veh|air|navy) — 生产页签。
req=radar。决定出现在侧边栏哪个分类页。
[Unit]>art= (artKey) — 美术资源名。
决定用哪个绘制函数/PNG/.r 素材。默认取节名。
[Unit]>key= (string) — 建造栏快捷键数字。
如
[Unit]>crush= (boolean) — 可碾压步兵。
key=1。重型载具设
[Unit]>faction= (factionId) — 阵营专属(可选)。
true。如
[Unit]>harvester= ({capacity,rate,unload}) — 采矿能力(JSON 对象)。
guard / steel,仅该阵营可造。设此字段则成为矿车,自动往返矿脉与精炼厂。
[Unit]>engineer= (boolean) — 工程师。
可占领敌方建筑、修复己方建筑。
[Unit]>canGarrison= (boolean) — 可进驻民房。
步兵默认 true,载具默认 false,可显式覆盖。
[Unit]>Infiltrate= (boolean) — 可潜入建筑。
潜入型步兵的基础开关。设
[Unit]>Saboteur= (boolean) — 爆破手。
true 才能使用 Saboteur= 爆破能力。默认 false。可进入「可爆破」建筑:建筑会像被安放 C4 一样爆炸摧毁,爆破手自身被消耗。
[Unit]>CanDrive= (boolean) — 可驾驶载具(偷车)。
- 前置:必须同时设
Infiltrate=yes,否则无法对建筑下手。 - 目标限制:只能进入敌方「可爆破」建筑(见建筑字段
ImmuneToSaboteurs=)。 - 互斥:不得与偷车/驾驶(
CanDrive=yes)、C4=yes、Occupier=yes、engineer=yes连用;爆破手也无法进驻民房(强制canGarrison=false)。 - 默认 false。仅对
kind=infantry有意义;应为无武装单位(不设weapon=/secondary=)。
与
[Unit]>C4= (boolean) — 自带 C4 爆破。
Saboteur=yes 互斥,不可同时设置。与
[Unit]>Occupier= (boolean) — 可进驻建筑。
Saboteur=yes 互斥,不可同时设置。与
[Unit]>PoweredBy= (comma-separated BuildingType) — 依赖控制建筑。
Saboteur=yes 互斥,不可同时设置。列出若干建筑 ID,该单位受这些建筑控制:只要还有其中任一座存在于己方(未摧毁),单位可正常指挥;若失去全部依赖建筑,则
[Unit]>BuiltAt= (comma-separated BuildingType) — 指定生产建筑。
无法被指挥攻击或移动(原地待命,也不会自动索敌开火;恢复依赖后可再次指挥)。适用于「需前置设施驱动才运转」的单位(如依赖发电机/指挥中心才能动的机器人)。列出若干建筑 ID,该单位只在这些建筑中被生产。用于实现「不同单位在不同工厂造」(如兵营产步兵、狗屋/特战站只产某类单位)。需与
[Unit]>forbidFactions= (comma-separated) — 禁止的阵营(可选)。
from=(生产建筑类别)配合,并保证至少有 from 建筑 + 一座 BuiltAt 建筑存在才可加入队列。默认不限定(任同类别工厂均可造)。如
forbidFactions=xness 表示该单位对非洲军禁用。3.4 单位皮肤
单位皮肤由商店系统管理(data/skins_ini.js),MOD 内可在 art.ini 中为皮肤 artKey 配置 PNG。皮肤字段以 skin_ 前缀区分:
[skin_rifleman_camo] name=林地迷彩 art=rifleman skinArt=skin_rifleman_camo kind=unit price=300 currency=gold desc=绿色迷彩,隐蔽性更佳
制作提示:新单位的
art= 若指向 .r 素材或 PNG,需在包内 res/ 提供,并在 mod.ini 的 res= 字段列出。没有对应素材时会显示占位方块。3.5 本工程新增单位(1.2 系列)
以下单位直接写在 data/units_ini.js 中,可直接作为 MOD 自定义单位的写法参考:
[interceptor] techLevel=1 name=截击机 desc=高速对空拦截机,专打敌方空军;需回机坪补弹。 kind=air hp=380 armor=air cost=1000 build=11 speed=168 rad=12 sight=8 turn=3.0 weapon=flak ; 复用现有防空武器(air=true 可打空) from=helipad req=radar tab=air art=interceptor key=3 ammo=10 rearm=9 alt=30
空军补弹:
ammo= + rearm= 令空中单位在弹药耗尽后需回 helipad 补给(与武装直升机一致)。[awacs] techLevel=1 name=预警机 desc=无武装。超大视野空中侦察,为友军提前暴露远处敌情。 kind=air hp=450 armor=air cost=1200 build=15 speed=112 rad=14 sight=16 turn=2.4 weapon= from=helipad req=radar tab=air art=awacs key=4 alt=40
[destroyer] name=驱逐舰 desc=重鱼雷驱逐舰,反舰反潜;深水炸弹可逼出潜水艇。 kind=naval moveType=naval hp=560 armor=heavy cost=1500 build=15 speed=92 rad=15 sight=9 turn=2.2 turretTurn=2.8 weapon=torpedo from=shipyard req=radar tab=navy art=gunboat key=5 techLevel=1
示例要点:空军
kind=air + from=helipad + tab=air;海军 kind=naval + moveType=naval + from=shipyard + tab=navy。