收起左侧

[教程] 【修改教程】如何制造出正常的马耳他固定炮

[复制链接]
列虚子发表于 2026-4-6 09:21:28
众所周知战役和羽神的月之湖地图里有一个要塞炮,拿去轰人非常的快乐。最近我在把决定版内容移植到亚洲王朝,因为我真的很讨厌决定版的画风,所以在制造马耳他的固定炮9215669d3076705961.png1513269d3079852ef0.png(实际上断断续续弄了好几年,阶段性回坑)
但是问题来了,这个炮的炮身和基座实际上是两个单位,如果你非要它合理的组合在一起,就得用农民锤两次,搞得强迫症都快出来了。

但如果你用地基座<SocketUnitType>xxxxxx</SocketUnitType>去连接,下方的基座就会沉入地底消失,直到炮身被摧毁才会出现。而这个炮身实际上是悬浮在半空的,看起来也非常的奇葩。3735369d305f7592fa.png(图一:如图所示)
目前我的解决办法是————不用<SocketUnitType>xxxxxx</SocketUnitType>。
————————
①首先将SPCFixedGunBase复制一遍新建为要塞炮基座单位yaosaipaotai,再把SPCFixedGun新建为要塞炮(炮身)yaosaipao
②然后给炮台定义tactics,开启它的建造能力。
<action>
<name stringid="69147">Build</name>
<type>Build</type>
<anim>Build</anim>
<active>1</active>
<maxrange>0.2</maxrange>
<rate type="Building">1.0</rate>
</action>

记住在<tactic></tactic>中间插入<action>Build</action>,插哪个无所谓。
③再让他可以制造炮身,也就是在protoy.xml加入了一个<Train row ='0' page ='0' column ='1'>yaosaipaotai</Train>6853669d306399ae76.png(图二:开启建造)

④下来修改炮台和基座的原始<UnitType>以及<Flag>,否则你造出来无法点击,或者会被敌人转化,具体的建议自己去对照圣典1-1章
⑤修改炮台的属性为建筑物,原本默认是单位,农民没法随心所欲的放置。
<BuildingWorkRate>1.0000</BuildingWorkRate>
<UnitType>BuildingClass</UnitType>
<UnitType>Building</UnitType>
<UnitType>BuildingClass</UnitType>
<UnitType>EconomicBuilding</UnitType>

⑥然后你就会神奇的发现,当你用农民造了基座以后,基座可以直接建造炮身,并且因为基座不会动,炮身你放太远它就不会制造,还必须放在炮台模型的基座处,就非常完美。6022469d306659758d.png图三:远了不会建造)204169d3067bded29.png(图四:放在基座才会建造,因为基座就是单位的实际碰撞。)
⑦一定要记得添加 <Command page ='10' column ='0'>Delete</Command>否则你放错地方就没法删除了。而且Flag也要删掉相应禁止Delete的语句。

但实际上我是想用Spawn命令让农民盖好炮台时,令炮台自动生出来炮身,但搞了一阵没实现,之前没碰过这个实操,所以很遗憾。ORZ

不过这些对建模大佬而言没什么意义,单纯是讨论用游戏内资源实现一些有趣的东西。

至于单位属性怎么定义就看各人喜好了,也不要问我具体该怎么制造之类的,用思考代替发问,不要做拿来主义者。

以上。

另外~早安!米娜!
dablive发表于 2026-4-6 17:42:18

列虚子发表于 2026-4-6 18:28:02

捉住一只猫猫大佬૮ ៸៸៸º ᗜ º៸៸៸ ა
dablive发表于 2026-4-8 15:41:12
列虚子 发表于 2026-4-6 18:28
捉住一只猫猫大佬૮ ៸៸៸º ᗜ º៸៸៸ ა

9233869d606a1ec787.png
YL8861发表于 2026-4-8 19:07:17
提示: 作者被禁止或删除 内容自动屏蔽
こはね发表于 2026-4-9 22:45:51
我以前尝试过修改anim xml,设定allowrotation="0"但是失败了,旋转炮台在无先例的情况下,很难研发出来

<?xml version="1.0" encoding="utf-8"?>

<animfile>
<definebone>bone_launchpoint</definebone>
<definebone>bone_muzzle</definebone>
<attachment>
base
<include>buildings\spc\fixed_gun\fixed_gun_base.xml</include>
</attachment>
<component>
fixed gun
<assetreference type="GrannyModel">
<file>buildings\spc\fixed_gun\fixed_gun</file>
</assetreference>
<attach a="base" allowrotation="0" frombone="bone_muzzle" tobone="attachpoints" syncanims="60"/>
</component>
<anim>
Idle
<assetreference type="GrannyAnim">
<file>buildings\spc\fixed_gun\fixed_gun_idle</file>
</assetreference>
<component>fixed gun</component>
</anim>
<anim>
RangedAttack
<assetreference type="GrannyAnim">
<file>buildings\spc\fixed_gun\fixed_gun_rangedAttack</file>
<tag type="CameraShake" force="0.09" duration="0.2">0.35</tag>
<tag type="Attack">0.35</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MortarShot">0.35</tag>
<tag type="Particles" particlename="fixedgunmuzzlefx">0.35</tag>
</assetreference>
<component>fixed gun</component>
</anim>
</animfile>
  • 列虚子 : 按照这个anim的思路,我刚才试了好久,锁死旋转=0那里没变化,甚至单独改了基座和炮管的anim试图融合二者,结果进游戏模型都不见了。把炮口骨骼从父级改为子级挂载也没用。 看来是源文件不支持这种引用
  • 列虚子 : 我在想,如果把基座Build当作人类,炮管挂载为bone_HEAD,能不能组合在一起呢?好像也不对,HEAD不能旋转
  • こはね 回复 列虚子 : 所以我也没办法,无论如何,基座就是会一起旋转
Graziani发表于 4 天前
这个设想我也想过,但我实现的方式有所不同
我是强制设置了炮台基座变成了类似于贸易站地点的那种建筑基础,然后可以在这个基础上搭建筑物,同时因为原版的基座其实考虑到了在一定高度的岸边建造设计了一个很高的炮座,所以我调了一下码头的建造逻辑,让基座变成了只能在岸边建造的建筑物然后让它作为建筑物生产单位,把炮的碰撞体积改到极小使其不错位
不过看下来还是大佬你这个方式更好
Graziani发表于 4 天前
 本帖最后由 Graziani 于 2026-5-17 20:15 编辑 

尝试了一下,通过Spawn指令直接在建造基地的时候产固定炮的方式也可行,具体来说这么改
1.tactic里写入强制生产
<action>
<name>Spawn</name>
<type>Spawn</type>
<rate type="SPCFixedGun">1.0 </rate>
<singleuse>1</singleuse>
<animationrate>1</animationrate>
<active>0</active>
<persistent>1</persistent>
</action>
<tactic>
Normal
<action>Spawn</action>
</tactic>
2.最好是把炮身的碰撞体积设置为0,炮台基地设置为0.0001
如果炮台体积过大(比如保持4×4,自动生产不出来,因为会把生产位置挤没)
3.在起始科技里设置开启自动生产的命令,或者在tactic的active里改为1默认启用

效果目测还不错,在2的设置下炮身几乎不会有偏移的情况,考虑到平衡性给基地加点价格吧
f227e5ef-b126-49a2-b724-daec544c2d21.png
e685eb39-7d51-4cbd-8d01-d80ae6524767.png
跳转到