MDT模组单位武器制作

单位,一共有三类,他们分别是制作单位的工厂、重构工厂和单位本身
单位本身我只讲官方分类的各一种机甲(全部真的太多了),基本可以囊括所有属性,如果你有其他想知道的可以留言
单位工厂
地面单位工厂 -> UnitFactory/单位工厂

解释
plans.unit: 生产的单位
plans.time: 生产时间
plans.requirements: 生产所消耗的物资

重构工厂
tankAssembler/坦克装配厂 -> UnitAssembler/装配工厂
下面的json代码plans字段为猜测未来写法,anuke没写PayloadStack的转换,当前实现不了
以下在v137版本是会报错的,猜的是未来可能的写法
解释
droneType: 用来装载的单位
dronesCreated: 装载单位数量
droneConstructTime: 装载单位被制造耗时
areaSize: 建造区域边长

倍乘级单位重构工厂 -> Reconstructor/重构工厂
解释
constructTime: 升级时间
upgrades.*.0: 升级前机甲
upgrades.*.1: 升级后机甲

单位
alpha/主角小飞机 -> flying(飞行单位)

解释
type: 单位种类(JsonMod有区分,在游戏区分不多,且也没有拓展字段。不填默认 flying)
defaultController: 单位默认控制者(见后)
isEnemy:是否被计数器记作敌人(一般辅助单位为 true)
lowAltitude: 低空飞行,对单位的图层和影子变化
flying: 是否能飞行
mineSpeed: 挖矿速度
mineTier: 大于物品 hardness 可挖掘
buildSpeed: 建筑速度
drag: 惯性
speed: 移动速度
accel: 加速度
itemCapacity: 物品容量
rotateSpeed: 单位转速
health: 生命值
engineOffset: 引擎偏移量(-y)
hitSize: 碰撞箱大小
alwaysUnlocked: 是否永久解锁
weapons: 武器(无需单独开一期,基本只能给单位用。下文w代替weapons里的weapon)
w.type: 武器类型(不填默认 Weapon)
w.name: 使用的贴图
w.reload: 装填时间
w.x, w.y: 武器在机甲上所在位置(以机甲中心为平面直角坐标系原点)
w.top: 武器是否永远在其他 单位及其子图层 之上
w.bullet: 使用的子弹


reign/王座 -> mech(机械单位)

解释
armor: 单位护甲值
mechStepParticles: 走路是否有粒子效果
stepShake: 走路屏幕摇晃强度
drownTimeMultiplier: 淹死时间倍率
mechFrontSway: 单位行走垂直摇晃
mechSideSway: 单位行走水平摇晃
ammoType: 所使用的子弹(如果开了 单位有弹药限制)
w.recoil: 武器后坐力特效
w.shake: 使用武器屏幕摇晃强度
w.shootSound: 使用武器声音
w.shootX, w.shootY: 子弹射击偏移(以武器中心为平面直角坐标系原点)

arkyid/毒蛊 -> legs(腿型单位)

解释
hovering: 是否悬浮,也会改变单位寻路方式(即寻路代价算法)
groundLayer: 图层,详见1565619256.github.io/Mindustry-zh_CN-modding-guide/constant.html(比较多,故不放在专栏内)
猫猫没有写图层数值转换器,所以只能写数字
allowLegStep: 如果是腿型单位且这个值为 true ,这个单位就可以跨过大多数建筑物
legCount: 腿的数量
legMoveSpace: 脚落脚距离倍率(一直走动情况下)
legPairOffset: 各腿移动时间间隔(或者不同步程度)
legLength: 腿长
legExtension: 小腿纵向坐标偏移量(一般用于无关节单位,合适的值只能试出来)
legBaseOffset: 大腿离单位中心距离
legLengthScl: 每次移动脚尝试向单位中心远离倍率(不能理解为腿长短缩放)
legSpeed: 腿移动速度
rippleScale: 落脚后脚底特效夸张程度(不知道怎么解释或者词穷想不出什么词)
legSplashRange: 脚落地溅射范围
legSplashDamage: 脚落地溅射伤害

retusa/潜螺 -> naval(海军)

解释
targetAir, targetGround: 是否瞄准空军, 陆军
faceTarget: 是否面向(瞄准/射击的)目标
trailLength: 尾拖长度(波浪尾拖)
waveTrailX, waveTrailY: 尾拖偏移
trailScale: 尾拖粗细
w.mirror: 是否镜像武器(以单位中心向上轴为对称轴作轴对称图形)
w.shoot: 射击形式(若不写type默认为 ShootPattern,挖坑+1)


oct/要塞 -> payload(荷载单位)

解释
engineSize: 引擎大小
payloadCapacity: 荷载容量(tilePayload一般取64)
drawShield: 是否绘制护盾(一个小圈)
buildBeamOffset: 建造枪偏移(y)
abilities: 单位能力


stell/铁蹄 -> Tank(坦克)

解释
squareShape: 是否为方形影子
omniMovement: 是否能全方位移动(若为 false 单位只可朝他面朝的方向移动)
rotateMoveFirst: 是否旋转在先
w.heatColor: 武器过热颜色
w.cooldownTime: 武器过热冷却时间

elude/挣脱 -> hover(悬浮单位)

解释
useEngineElevation: 始终显示引擎正常尺寸,不受高度影响
parts: 单位额外绘制部件
w.shootCone: 射击角判定(瞄准允许偏差角度,采用角度制)
w.baseRotation: 武器基础旋转角度

assemblyDrone/装配无人机 -> tether(打工单位)

解释
targetable: 若为 true,单位不会被任何东西瞄准
hidden: 是否隐藏(核心数据库,荷载路由器配置界面...)
useUnitCap: 无单位数量限制
logicControllable:逻辑可控性
playerControllable: 玩家可控性
allowedInPayloads: 是否能作为荷载被运输
createWreck: 是否显示死亡印记

latum/爆浆大虫子 -> crawl(蠕动单位)
实验性(v137)单位,属性肯定不全,请仔细考虑是否使用这种单位

解释
segments: 身体分节数
segmentScl, segmentPhase, segmentMag: 不知道
float trns = Mathf.sin(crawl.crawlTime() + i * segmentPhase, segmentScl, segmentMag)
immunities: 免疫效果
drawCell: 是否绘制队伍指示器
drawBody: 是否绘制单位身体
segmentRotSpeed: 分节转速
segmentMaxRot: 各个分节最大差异角度
crushDamage: 在 坦克/蠕动 单位下方每帧受到的伤害(?
healFlash: 被治疗是否显示颜色
healColor: 被治疗显示颜色

至于为什么不写 SpawnDeathAbility,请看如下片段自行理解


分类部分
单位工厂
plans.unit: UnitType
plans.time: float
plans.requirements: ItemStack[]

重构工厂
constructTime: float
upgrades: UnitTypes[]

装配工厂
droneType: UnitType
dronesCreated: int
droneConstructTime: float
areaSize: int

单位
aiController: Prov<? extends UnitController>
weapons: Seq<Weapon>
isEnemy:boolean
lowAltitude: boolean
flying: boolean
mineSpeed: float
mineTier: int
buildSpeed: float
speed: float
accel: int
itemCapacity: int
rotateSpeed: speed
health: float
engineOffset: float
hitSize: int
armor: float
mechStepParticles: boolean
stepShake: float
drownTimeMultiplier: float
mechFrontSway: float
mechSideSway: float
ammoType: AmmoType
hovering: boolean
groundLayer: float
allowLegStep: boolean
legCount: int
legMoveSpace: float
legPairOffset: float
legLength: float
legExtension: float
legBaseOffset: float
legLengthScl: float
legSpeed: float
rippleScale: float
legSplashRange: float
legSplashDamage: float
targetAir, targetGround: boolean
faceTarget: boolean
trailLength: int
waveTrailX, waveTrailY: float
trailScale: float
engineSize: float
payloadCapacity: float
drawShield: boolean
buildBeamOffset: float
abilities: Seq<Ability>
squareShape: boolean
omniMovement: boolean
rotateMoveFirst: boolean
useEngineElevation: boolean
parts: Seq<DrawPart>
targetable: boolean
hidden: boolean
useUnitCap: boolean
logicControllable: boolean
playerControllable: boolean
allowedInPayloads: boolean
createWreck: boolean
segments: int
segmentScl, segmentPhase, segmentMag: float
immunities: ObjectSet<StatusEffect>
drawCell: boolean
drawBody: boolean
segmentRotSpeed: float
segmentMaxRot: float
crushDamage: float
healFlash: boolean
healColor: Color

武器
name: String
reload: float
x, y: float
top: boolean
bullet: BulletType
recoil: float
shake: float
shootSound: Sound
shootX, shootY: float
mirror: boolean
shoot: ShootPattern
heatColor: Color
cooldownTime: float
shootCone: float
baseRotation: float

其他
AI
AssemblerAI: 装配AI(装配无人机)
BuilderAI: 建造AI(T2空辅)
CargoAI: 搬运AI(货运无人机)
DefenderAI: 保护单位AI(那只兲)
FlyingAI: 空军AI(日蚀)
FlyingFollowAI: 飞行跟随AI?(悲怆)
GroundAI: 陆军AI(尖刀)
HugAI: 亲亲AI?(上面的大虫子)
LogicAI: 被逻辑控制AI
MinnerAI: 矿工AI(独影/德鲁格)
RepairAI: 修复AI(巨象)
SuicideAI: 自杀AI(T1爬爬)

后言
本期把武器和单位杂在一起,故字数会很多,请细心观看我写一下卡一下挺难受的。现在最主要的模组内容更新完了(如果你有看我以前的文章),接着就是去完善文集内容。现在学了一些jsMod,到时候也可能继续更新jsMod的教程。顺便,`DeveloperMode`这个模组帮了我很多忙虽然137我基本没用过了,让我省去了很多退出重进的时间。Anuken更新的真快, 一个学期更了6个版本我也不知道为什么有人一直在看另一个文集的内容,我之前都不知道我在写什么东西,之前写教程很大程度上是为了蹭热度,就翻译wiki的内容谁不会啊,现在想想还是挺尴尬的。这个教程也必定会过时,毕竟专栏只能改3次。
8月13日更新版
[M] 更详细的内容(?
[+] 更多废话(?