.\README\attr.main\UnlockableContent\Unit>

Unit

extends 可解锁内容

主要属性

fieldtypedefaultnote
constructorProv<? extends Unit>单位实例
healthfloat200单位生命值
armorfloat0单位护甲值
rangefloat-1
maxRangefloat-1
speedfloat1.1单位移速
boostMultiplierfloat1单位助推移速倍率
rotateSpeedfloat5单位机身在单位时间转动角度大小
dragfloat0.3单位惯性大小
accelfloat0.5单位加速度大小
physicsbooleantrue是否有碰撞箱
hitSizefloat6单位正方形碰撞箱边长大小
stepShakefloat-1走动屏幕摇晃强度(LEG/MECH)
rippleScalefloat1地面粒子效果强度
riseSpeedfloat0.08单位助推上空速度
fallSpeedfloat0.018单位无助推下地速度
missileAccelTimefloat0导弹单位加速度到全速耗时
mineRangefloat70单位挖矿范围
buildRangefloatVars.buildingRange单位构造方块范围
crashDamageMultiplierfloat1飞行单位坠落伤害倍率
dspEstimatefloat-1单位秒伤(-1为自动计算)
hoveringbooleanfalse是否不会被地板效果效应
canDrownbooleantrue陆地单位淹没时间倍率
drownTimeMultiplierfloat1陆地单位淹没时间倍率
strafePenaltyfloat0.5向不同方位时移速损失
researchCostMultiplierfloat50单位研究消耗倍率
groundLayerfloatLayer.groundUnit单位所在图层
buildSpeedfloat-1单位建造速度(<0以不可构造方块)
rotateToBuildingbooleantrue是否转向当前构造的方块
aimDstfloat-1单位瞄准最小范围
buildBeamOffsetfloat3.8单位构造枪y轴偏移
shadowElevationfloat-1
shadowElevationSclfloat1
engineOffsetfloat5尾喷焰负偏移(y)
engineSizefloat2.5尾喷焰大小
engineLayerfloat-1尾喷焰所在图层
itemOffsetYfloat3单位所有物品负偏移(y)
lightRadiusfloat-1单位发光半径(<0以取默认值)
lightOpacityfloat0.6单位发光强度(α通道)
fogRadiusfloat-1单位探雾范围(<0以自动计算)
waveTrailXfloat4海军尾拖偏移
waveTrailYfloat-3
trailSclfloat1尾拖粗细
abilitiesSeq<Ability>new Seq<>单位技能
weaponsSeq<Weapon>new Seq<>单位武器
immunitesObjectSet
<StatusEffect>
new ObjectSet<>单位免疫效果
canHealbooleanfalse单位是否能被治疗
healFlashbooleantrue是否在单位被治疗时闪光
healColorColorPal.heal单位被治疗闪光颜色
lightColorColorPal.powerLight单位发光颜色
deathSoundSoundSounds.bang单位死亡音效
loopSoundSoundSounds.none单位周边音效
loopSoundVolumefloat0.5单位周边音效响度
fallEffectEffectFx.fallSmoke助推单位坠落特效
fallEngineEffectEffectFx.fallSmoke助推单位坠落时发动机特效
deathExplosionEffectEffectFx.dynamicExplosion死亡单位爆炸特效
partsSeq<DrawPart>new Seq<>(DrawPart.class)单位额外绘制部件
enginesSeq<UnitEngine>new Seq<>助推单位发动机
engineColor@Nullable Colornull覆盖全部发动机颜色
engineColorInnerColorColor.white发动机内部颜色
trailLengthint0海军尾拖长度
outlinesbooleantrue是否有外描边
outlineRadiusint3外描边粗细
outlineColorcolorPal.darkerMetal外描边颜色
itemCapacityint-1单位物品容量(<0以碰撞箱计算)
ammoTypeAmmoTypenew ItemAmmoType
(Items.copper)
物品使用的弹药
ammoCapacityint-1物品弹药容量(<0以武器射速计算)
mineWallsbooleanfalse是否能挖墙矿
mineFloor是否能挖地矿
mineHardnessScalingbooleantrue是否依据矿物硬度调整挖矿效率
mineTierint-1单位钻头强度
mineSpeedfloat1单位钻取速度
mineSoundVolumefloat0.6单位挖矿声音响度
mineItemsSeq<Item>Seq.with(
Items.copper,
Items.lead,
Items.titanium,
Items.thorium)
单位计划挖掘矿物
hiddenbooleanfalse是否隐藏单位
useUnitCapbooleantrue是否有单位数量上限
flyingbooleanfalse是否永远飞行
lowAltitudebooleanfalse低空飞行, 图层相关
canBoostbooleanfalse是否可助推, 助推时为空军
canAttackbooleantrue单位是否没有武器攻击
targetAirbooleantrue是否瞄准空军
targetGroundbooleantrue是否瞄准陆军
faceTargetbooleantrue是否尝试面向瞄准的目标
circleTargetbooleanfalse飞行单位是否围绕目标
singleTargetbooleanfalse全部武器是否只瞄准单个目标
forceMultiTargetbooleanfalse是否强制瞄准多个目标
aiControllerProv<? extends
UnitController>
见note被构造后默认分配的AI(不填以flying决定AI)
controllerFunc<Unit, ? extends UnitController>见note决定单位用什么AI的算法
(不填默认为aiController或被指挥AI)
commandsUnitCommand[]{}单位指令
defaultCommand@Nullable UnitCommand单位默认指令
logicControllablebooleantrue是否能被逻辑控制
playerControllablebooleantrue是否能被玩家控制
payloadCapacitybooleantrue单位荷载容量
pickupUnitbooleantrue是否能捡起单位
allowedInPayloadsbooleantrue是否能作为荷载被运输
vulnerableWithPayloadsbooleanfalse是否在单位有荷载时可被攻击
(下两项为false时)
targetablebooleantrue是否能被瞄准
hittablebooleantrue是否能被射击
killablebooleantrue是否能被杀死
omniMovementbooleantrue是否能全方位移动
(而非面朝方向)
rotateMoveFirstbooleanfalse是否先转到目标方位再移动
drawBuildBeambooleantrue是否绘制建造枪
drawCellbooleantrue是否绘制队伍指示器
drawItemsbooleantrue是否绘制携带物品
drawShieldsbooleantrue是否绘制单位护盾
drawBodybooleantrue是否绘制单位身体
LEG 腿型单位
allowLegStepbooleanfalse是否允许为腿型单位
legPhysicsLayerbooleantrue
legCountint4腿的数量
legGroupSizeint2
legLengthfloat10腿的长度
legSpeedfloat0.1腿的移速
legForwardSclfloat1
legBaseOffsetfloat0大腿向单位中心远离半径
legMoveSpacefloat1脚落脚距离倍率(一直走动前提)
legExtensionfloat0小腿纵向坐标偏移量(多用于无关节单位)
legPairOffsetfloat0各腿移动时间间隔(或者不同步程度)
legLengthSclfloat1每次移动脚尝试向单位中心远离倍率
legStraightLengthfloat1
legMaxLengthfloat1.75
legMinLengthfloat0
legSplashRangefloat5落脚点溅射范围
legSplashDamagefloat0溅射伤害
baseLegStraightnessfloat0
legStraightnessfloat0
lockLegBasebooleanfalse
legContinuousMoveboolean
flipBackLegsbooleantrue
flipLegSidebooleanfalse
MECH 机甲单位
baseRotateSpeedfloat5机座在单位时间转动角度大小
mechLandShakefloat0
mechSideSwayfloat0.54机甲走动左右摇晃力度
mechFrontSwayfloat0.54机甲走动前后摇晃力度
mechStridefloat-1
mechStepParticlesbooleanfalse是否有走路粒子特效
mechLegColorcolorPal.darkMetal
TANK 坦克单位
treadFramefloat18
treadPullOffsetfloat0
MISSILE 导弹单位
lifetimefloat60 * 5存活时间
homingDelayfloat10追踪开启时间
SEGMENTED 分节单位
segmentsint0分节数量
segmentMagfloat2
segmentSclfloat4
segmentPhasefloat5
segmentRotSpeedfloat1各分节转速
segmentMaxRotfloat30各分节最大差异角度
crawlSlowdownFracfloat0.55
crawlSlowdownfloat0.5
crushDamagefloat0在单位本下方受到的帧伤

构造方法

public UnitType(String name){
    super(name);
    constructor = EntityMapping.map(this.name);
}

菜单显示

@Override
public void setStats(){
    Unit inst = constructor.get();

    stats.add(Stat.health, health);
    stats.add(Stat.armor, armor);
    stats.add(Stat.speed, speed * 60f / tilesize, StatUnit.tilesSecond);
    stats.add(Stat.size, hitSize / tilesize, StatUnit.blocksSquared);
    stats.add(Stat.itemCapacity, itemCapacity);
    stats.add(Stat.range, (int)(maxRange / tilesize), StatUnit.blocks);
    stats.add(Stat.commandLimit, commandLimit);

    if(abilities.any()){
        var unique = new ObjectSet();

        for(Ability a : abilities){
            if(unique.add(a.localized())){
                stats.add(Stat.abilities, a.localized());
            }
        }
    }

    stats.add(Stat.flying, flying);

    if(!flying){
        stats.add(Stat.canBoost, canBoost);
    }

    if(mineTier >= 1){
        stats.addPercent(Stat.mineSpeed, mineSpeed);
        stats.add(Stat.mineTier, StatValues.blocks(b -> b instanceof Floor f && f.itemDrop != null && f.itemDrop.hardness <= mineTier && (!f.playerUnmineable || Core.settings.getBool("doubletapmine"))));
    }
    if(buildSpeed > 0){
        stats.addPercent(Stat.buildSpeed, buildSpeed);
    }
    if(inst instanceof Payloadc){
        stats.add(Stat.payloadCapacity, (payloadCapacity / (tilesize * tilesize)), StatUnit.blocksSquared);
    }

    var reqs = getFirstRequirements();

    if(reqs != null){
        stats.add(Stat.buildCost, StatValues.items(reqs));
    }

    if(weapons.any()){
        stats.add(Stat.weapons, StatValues.weapons(this, weapons));
    }
}