让单位可以采集资源
这个教程是给士兵添加采集能力,是否要添加伐木你自己考虑吧,要伐木必须加上标签AbstractVillager,但是加上了,士兵就不能有队列了,而且只能单个训练(除非像俄国那样捆绑训练)。
大概的做法是:
1.先把要修改的单位与村民的tactics文件以及动画xml都提取出来。
2.打开村民的tactics,挑选与采集资源有关的内容,添加进要修改的单位的tactics。(有AutoGatherTrade、Gather、NoWork、CrateGather、Hunting、ChopAttack这几个。我怎样知道的?你对比一下村民的tactics与其他单位的tactics )
3.打开村民动画xml,挑选与采集资源有关的动作,添加进要修改的单位的动画xml。(attach有bowl、knife、pickaxe、axe、hoe;动作有GatherChop、GatherMine、GatherFarm、GatherHunt、GatherBush、GatherCrate、GatherFarmWalk、GatherFarmHoe、GatherFarmSow、GatherFarmWeed;这些貌似都是在主程序定义的,从村民那移植主要看修改帝国3的经验。 )
怎样照搬就不讲了,上面已经告诉你了。
这是tactics语句: <action> <name stringid="69149">AutoGatherTrade</name> <type>AutoGather</type> <donotautogatherunlessgathering>1</donotautogatherunlessgathering> <active>0</active> <persistent>1</persistent> </action> <action> <name stringid="42178">Gather</name> <type>Gather</type> <maxrange>0.5</maxrange> <rate type="Plantation">1.0</rate> <rate type="AbstractMine">1.0</rate> <rate type="SPCSpanishShipRuins">1.0</rate> <rate type="Farm">1.0</rate> <rate type="Mill">1.0</rate> <rate type="FirePit">1.0</rate> <rate type="BerryBush">1.0</rate> <rate type="Tree">1.0</rate> <rate type="Herdable">1.0</rate> <rate type="Huntable">1.0</rate> <rate type="ypBerryBuilding">1.0</rate> <rate type="ypGroveBuilding">1.0</rate> </action> <action> <name stringid="69183">NoWork</name> <type>NoWork</type> <maxrange>10</maxrange> <rate type="Herdable">1.0</rate> <rate type="Huntable">1.0</rate> <typedmaxrange type="Herdable">0</typedmaxrange> <typedmaxrange type="AbstractNuggetWater">0</typedmaxrange> <typedmaxrange type="Huntable">10</typedmaxrange> </action> <action> <name stringid="69150">CrateGather</name> <anim>GatherCrate</anim> <type>Gather</type> <maxrange>0.5</maxrange> <rate type="AbstractResourceCrate">1.0</rate> </action> <action> <name stringid="69151">Hunting</name> <type>Hunting</type> <maxrange>10</maxrange> <rate type="Herdable">1.0</rate> <rate type="Huntable">1.0</rate> <rate type="Tree">1.0</rate> <typedmaxrange type="Herdable">0</typedmaxrange> <typedmaxrange type="Huntable">10</typedmaxrange> <typedmaxrange type="Tree">0</typedmaxrange> </action> <action> <name stringid="42136">ChopAttack</name> <type>Attack</type> <attackaction>1</attackaction> <handlogic>1</handlogic> <anim>GatherChop</anim> <maxrange>2</maxrange> <rate type="Tree">1.0 </rate> </action>
<action>AutoGatherTrade</action> <action>Gather</action> <action>NoWork</action> <action>CrateGather</action> <action>Hunting</action>
这是单位xml语句:
因为部分动作都采用Bip01 Prop2的骨骼,所以最好在xml顶部加上下面的定义,不然可能会出错(如果原本就有就不用添加) <definebone>Bip01 Prop2</definebone>
attach部件:
attachment> bowl <component> bowl <assetreference type="GrannyModel"> <file>units\attachments\bowl_villager</file> </assetreference> </component> <anim> Idle <component>bowl</component> </anim> </attachment> <attachment> knife <component> knife <assetreference type="GrannyModel"> <file>units\attachments\knife_villager</file> </assetreference> </component> <anim> Idle <component>knife</component> </anim> </attachment> <attachment> pickaxe <component> pickaxe <assetreference type="GrannyModel"> <file>units\attachments\pickaxe_villager</file> </assetreference> </component> <anim> Idle <component>pickaxe</component> </anim> </attachment> <attachment> axe <component> axe <assetreference type="GrannyModel"> <file>units\attachments\axe_villager</file> </assetreference> </component> <anim> Idle <component>axe</component> </anim> </attachment> <attachment> hoe <component> hoe <assetreference type="GrannyModel"> <file>units\attachments\hoe_villager</file> </assetreference> </component> <anim> Idle <component>hoe</component> </anim> </attachment>
anim语句:
<anim> GatherChop <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_choptreeside</file> <tag type="Attack">0.66</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherWood">0.68</tag> </assetreference> <component>ModelComp</component> <attach a="axe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherMine <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gathermine1</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherCoin">0.86</tag> </assetreference> <component>ModelComp</component> <attach a="pickaxe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarm <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_gathefruit</file> <weight>50</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.33</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.57</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmsow</file> <weight>50</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.29</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.46</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.62</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.75</tag> </assetreference> <assetreference type="GrannyAnim"> <file>units\asians\shared\villager\villager_farm1</file> <weight>60</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.03</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.25</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.47</tag> </assetreference> <assetreference type="GrannyAnim"> <file>units\asians\shared\villager\villager_farm2</file> <weight>20</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.30</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.41</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.51</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.80</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.91</tag> </assetreference> <assetreference type="GrannyAnim"> <file>units\asians\shared\villager\villager_farm3</file> <weight>20</weight> </assetreference> <component>ModelComp</component> <attach a="bowl" frombone="" tobone="Bip01 Prop2" syncanims="0"/> </anim> <anim> GatherHunt <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherhunt1</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherMeat">0.46</tag> </assetreference> <component>ModelComp</component> <attach a="knife" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherBush <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_gathefruit</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFruit">0.33</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFruit">0.57</tag> </assetreference> <component>ModelComp</component> <attach a="bowl" frombone="" tobone="Bip01 Prop2" syncanims="0"/> </anim> <anim> GatherCrate <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gathercrate1</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFruit">0.56</tag> </assetreference> <component>ModelComp</component> </anim> <anim> GatherFarmWalk <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmwalk</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.33</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.73</tag> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarmHoe <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmhoe</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.14</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.28</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.39</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.65</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.76</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.89</tag> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarmSow <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmsow</file> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarmWeed <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmweed</file> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim>
不要把下面的黑色背景的语句给复制了。
留意一下那个<component>ModelComp</component>,一般单位都是<component>ModelComp</component>,但在村民等单位为<component>Villager</component>,不排除其他单位还有其他的<component>xxxxx</component>,如果有的话自己复制语句后,直接按Ctrl+H进行全部替换(看上去不指点你是不行的了,将<component>Villager</component>全部替换成<component>ModelComp</component>) 。另外,<component>xxxxx</component>就是在调用模型上面的<component>语句下面的名称定义的。
乱七八糟的,直接来看例子(这个是殖民地民兵的语句): <component> ModelComp <logic type="LowPoly"> <normal> <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\colonial_militia</file> </assetreference> </normal> <lowpoly> <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\lp_colonial_militia</file> </assetreference> </lowpoly> </logic> <decal> <effecttype>default</effecttype> <texture isfakeshadow="1">shadows_selections\shadow_circle_32x32</texture> <selectedtexture>shadows_selections\selection_circle_32x32</selectedtexture> <width>1.0</width> <height>1.0</height> </decal> <attach a="hat" frombone="bone_hat" tobone="HEAD" syncanims="0"/> </component>
红色的ModelComp 语句就是component的定义,在anim里面可以使用<component>ModelComp</component>调用这个ModelComp 定义的模型、attach等。
protoy语句:
伐木必须加上标签AbstractVillager,但是加上了,士兵就不能有阵型,而且只能单个训练(除非像俄国那样捆绑训练)
<UnitType>AbstractVillager</UnitType>
<ProtoAction> <Name>AutoGatherTrade</Name> <Type>AutoGather</Type> <Rate type ='Trade'>0.030000</Rate> </ProtoAction> <ProtoAction> <Name>Hunting</Name> <Rate type ='Herdable'>1.000000</Rate> <Rate type ='Huntable'>1.000000</Rate> <Rate type ='Tree'>1.000000</Rate> </ProtoAction> <ProtoAction> <Name>ChopAttack</Name> <Damage>8.000000</Damage> <DamageType>Hand</DamageType> </ProtoAction> <ProtoAction> <Name>CrateGather</Name> <Rate type ='AbstractResourceCrate'>8.000000</Rate> </ProtoAction> <ProtoAction> <Name>Gather</Name> <Rate type ='Tree'>0.500000</Rate> <Rate type ='Farm'>0.500000</Rate> <Rate type ='Plantation'>0.500000</Rate> <Rate type ='Herdable'>2.000000</Rate> <Rate type ='Huntable'>0.840000</Rate> <Rate type ='AbstractMine'>0.600000</Rate> <Rate type ='BerryBush'>0.670000</Rate> <Rate type ='FirePit'>0.100000</Rate> <Rate type ='Mill'>0.670000</Rate> <Rate type ='ypRicePaddy' resource ='Food'>0.500000</Rate> <Rate type ='ypRicePaddy' resource ='Gold'>0.340000</Rate> <Rate type ='ypBerryBuilding'>0.670000</Rate> <Rate type ='ypGroveBuilding'>0.500000</Rate> </ProtoAction>
本教程采用殖民地民兵作为例子。 (纯属娱乐,革命后不仅能打,还能采集资源,简直无话可说。)
1.先把殖民地民兵tactics文件以及动画xml都提取出来。
2.在protoy.xml照格式添加上述的protoy语句,另外你应该把殖民地民兵的tactics修改成独有的tactics,不然在原来的tactics上修改会影响到其他单位。
(村民标签是否添加你自己决定)
protoy.xml - 记事本
____
□
X
文件(F) 编辑(E) 格式(O) 查看(V) 帮助(H)
<Unit id ='764' name ='xpColonialMilitia'> <DBID>1148</DBID> <DisplayNameID>44372</DisplayNameID> <EditorNameID>44373</EditorNameID> <PopulationCount>1</PopulationCount> <ObstructionRadiusX>0.4900</ObstructionRadiusX> <ObstructionRadiusZ>0.4900</ObstructionRadiusZ> <FormationCategory>Ranged</FormationCategory> <MaxVelocity>5.0000</MaxVelocity> <MaxRunVelocity>7.0000</MaxRunVelocity> <MovementType>land</MovementType> <TurnRate>18.0000</TurnRate> <AnimFile>units\infantry_ranged\colonial_militia\colonial_militia.xml</AnimFile> <ImpactType>Flesh</ImpactType> <PhysicsInfo>dude</PhysicsInfo> <Icon>ui\units\colonial_militia_icon</Icon> <PortraitIcon>ui\units\colonial_militia_portrait</PortraitIcon> <RolloverTextID>44371</RolloverTextID> <ShortRolloverTextID>44370</ShortRolloverTextID> <InitialHitpoints>200.0000</InitialHitpoints> <MaxHitpoints>200.0000</MaxHitpoints> <LOS>18.0000</LOS> <ProjectileProtoUnit>InvisibleProjectile</ProjectileProtoUnit> <AutoAttackRange>16.0000</AutoAttackRange> <UnitAIType>RangedCombative</UnitAIType> <TrainPoints>30.0000</TrainPoints> <Bounty>12.0000</Bounty> <BuildBounty>12.0000</BuildBounty> <Cost resourcetype ='Food'>100.0000</Cost> <CarryCapacity resourcetype ='Food'>1.0000</CarryCapacity> <CarryCapacity resourcetype ='Gold'>1.0000</CarryCapacity> <AllowedAge>2</AllowedAge> <Armor type ='Hand' value ='0.3000'></Armor> <UnitType>AbstractVillager</UnitType> <UnitType>LogicalTypeHealed</UnitType> <UnitType>LogicalTypeValidSharpshoot</UnitType> <UnitType>LogicalTypeNeededForVictory</UnitType> <UnitType>LogicalTypeHandUnitsAutoAttack</UnitType> <UnitType>LogicalTypeLandMilitary</UnitType> <UnitType>LogicalTypeScout</UnitType> <UnitType>LogicalTypeValidSPCUnitsDeadCondition</UnitType> <UnitType>LogicalTypeGarrisonInShips</UnitType> <UnitType>LogicalTypeRangedUnitsAutoAttack</UnitType> <UnitType>LogicalTypeVillagersAttack</UnitType> <UnitType>LogicalTypeHandUnitsAttack</UnitType> <UnitType>LogicalTypeRangedUnitsAttack</UnitType> <UnitType>LogicalTypeMinimapFilterMilitary</UnitType> <UnitType>AbstractHeavyInfantry</UnitType> <UnitType>AbstractInfantry</UnitType> <UnitType>Unit</UnitType> <UnitType>Military</UnitType> <UnitType>UnitClass</UnitType> <UnitType>Ranged</UnitType> <UnitType>AbstractGunpowderTrooper</UnitType> <UnitType>HasBountyValue</UnitType> <UnitType>CountsTowardMilitaryScore</UnitType> <UnitType>AbstractCavalryInfantry</UnitType> <UnitType>ConvertsHerds</UnitType> <UnitType>AbstractRangedInfantry</UnitType> <Flag>CollidesWithProjectiles</Flag> <Flag>ApplyHandicapTraining</Flag> <Flag>CorpseDecays</Flag> <Flag>ShowGarrisonButton</Flag> <Flag>DontRotateObstruction</Flag> <Flag>ObscuredByUnits</Flag> <Flag>Tracked</Flag> <Command page ='10' column ='1'>Stop</Command> <Command page ='10' column ='0'>Garrison</Command> <Command page ='10' column ='2'>Delete</Command> <Tactics>ColonialMilitia.tactics </Tactics> <ProtoAction> <Name>AutoGatherTrade</Name> <Type>AutoGather</Type> <Rate type ='Trade'>0.030000</Rate> </ProtoAction> <ProtoAction> <Name>Hunting</Name> <Rate type ='Herdable'>1.000000</Rate> <Rate type ='Huntable'>1.000000</Rate> <Rate type ='Tree'>1.000000</Rate> </ProtoAction> <ProtoAction> <Name>ChopAttack</Name> <Damage>8.000000</Damage> <DamageType>Hand</DamageType> </ProtoAction> <ProtoAction> <Name>CrateGather</Name> <Rate type ='AbstractResourceCrate'>8.000000</Rate> </ProtoAction> <ProtoAction> <Name>Gather</Name> <Rate type ='Tree'>0.500000</Rate> <Rate type ='Farm'>0.500000</Rate> <Rate type ='Plantation'>0.500000</Rate> <Rate type ='Herdable'>2.000000</Rate> <Rate type ='Huntable'>0.840000</Rate> <Rate type ='AbstractMine'>0.600000</Rate> <Rate type ='BerryBush'>0.670000</Rate> <Rate type ='FirePit'>0.100000</Rate> <Rate type ='Mill'>0.670000</Rate> <Rate type ='ypRicePaddy' resource ='Food'>0.500000</Rate> <Rate type ='ypRicePaddy' resource ='Gold'>0.340000</Rate> <Rate type ='ypBerryBuilding'>0.670000</Rate> <Rate type ='ypGroveBuilding'>0.500000</Rate> </ProtoAction> <ProtoAction> <Name>BuildingAttack</Name> <Damage>20.000000</Damage> <DamageType>Siege</DamageType> <ROF>3.000000</ROF> </ProtoAction> <ProtoAction> <Name>DefendHandAttack</Name> <Damage>12.000000</Damage> <DamageType>Hand</DamageType> <ROF>1.500000</ROF> <DamageBonus type ='AbstractCavalry'>2.000000</DamageBonus> <DamageBonus type ='AbstractLightInfantry'>1.500000</DamageBonus> </ProtoAction> <ProtoAction> <Name>DefendRangedAttack</Name> <Damage>24.000000</Damage> <DamageType>Ranged</DamageType> <MinRange>2.000000</MinRange> <MaxRange>12.000000</MaxRange> <ROF>3.000000</ROF> <DamageBonus type ='AbstractCavalry'>2.000000</DamageBonus> <DamageBonus type ='AbstractLightInfantry'>1.500000</DamageBonus> </ProtoAction> <ProtoAction> <Name>MeleeHandAttack</Name> <Damage>12.000000</Damage> <DamageType>Hand</DamageType> <ROF>1.500000</ROF> <DamageBonus type ='AbstractCavalry'>2.000000</DamageBonus> <DamageBonus type ='AbstractLightInfantry'>1.500000</DamageBonus> </ProtoAction> <ProtoAction> <Name>StaggerHandAttack</Name> <Damage>12.000000</Damage> <DamageType>Hand</DamageType> <ROF>1.500000</ROF> <DamageBonus type ='AbstractCavalry'>2.000000</DamageBonus> <DamageBonus type ='AbstractLightInfantry'>1.500000</DamageBonus> </ProtoAction> <ProtoAction> <Name>StaggerRangedAttack</Name> <Damage>24.000000</Damage> <DamageType>Ranged</DamageType> <MinRange>2.000000</MinRange> <MaxRange>12.000000</MaxRange> <ROF>3.000000</ROF> <DamageBonus type ='AbstractCavalry'>2.000000</DamageBonus> <DamageBonus type ='AbstractLightInfantry'>1.500000</DamageBonus> </ProtoAction> <ProtoAction> <Name>VolleyHandAttack</Name> <Damage>12.000000</Damage> <DamageType>Hand</DamageType> <ROF>1.500000</ROF> <DamageBonus type ='AbstractCavalry'>2.000000</DamageBonus> <DamageBonus type ='AbstractLightInfantry'>1.500000</DamageBonus> </ProtoAction> <ProtoAction> <Name>VolleyRangedAttack</Name> <Damage>24.000000</Damage> <DamageType>Ranged</DamageType> <MinRange>2.000000</MinRange> <MaxRange>12.000000</MaxRange> <ROF>3.000000</ROF> <DamageBonus type ='AbstractCavalry'>2.000000</DamageBonus> <DamageBonus type ='AbstractLightInfantry'>1.500000</DamageBonus> </ProtoAction> </Unit>
3.将提取好的殖民地民兵的tactics改名成你新定义的tactics;按照格式添加上述tactics语句
ColonialMilitia.tactics - 记事本
____
□
X
文件(F) 编辑(E) 格式(O) 查看(V) 帮助(H)
<!-- converted from XMB to XML -->
<tactics> <action> <name stringid="69149">AutoGatherTrade</name> <type>AutoGather</type> <donotautogatherunlessgathering>1</donotautogatherunlessgathering> <active>0</active> <persistent>1</persistent> </action> <action> <name stringid="42178">Gather</name> <type>Gather</type> <maxrange>0.5</maxrange> <rate type="Plantation">1.0</rate> <rate type="AbstractMine">1.0</rate> <rate type="SPCSpanishShipRuins">1.0</rate> <rate type="Farm">1.0</rate> <rate type="Mill">1.0</rate> <rate type="FirePit">1.0</rate> <rate type="BerryBush">1.0</rate> <rate type="Tree">1.0</rate> <rate type="Herdable">1.0</rate> <rate type="Huntable">1.0</rate> <rate type="ypBerryBuilding">1.0</rate> <rate type="ypGroveBuilding">1.0</rate> </action> <action> <name stringid="69183">NoWork</name> <type>NoWork</type> <maxrange>10</maxrange> <rate type="Herdable">1.0</rate> <rate type="Huntable">1.0</rate> <typedmaxrange type="Herdable">0</typedmaxrange> <typedmaxrange type="AbstractNuggetWater">0</typedmaxrange> <typedmaxrange type="Huntable">10</typedmaxrange> </action> <action> <name stringid="69150">CrateGather</name> <anim>GatherCrate</anim> <type>Gather</type> <maxrange>0.5</maxrange> <rate type="AbstractResourceCrate">1.0</rate> </action> <action> <name stringid="69151">Hunting</name> <type>Hunting</type> <maxrange>10</maxrange> <rate type="Herdable">1.0</rate> <rate type="Huntable">1.0</rate> <rate type="Tree">1.0</rate> <typedmaxrange type="Herdable">0</typedmaxrange> <typedmaxrange type="Huntable">10</typedmaxrange> <typedmaxrange type="Tree">0</typedmaxrange> </action> <action> <name stringid="42136">ChopAttack</name> <type>Attack</type> <attackaction>1</attackaction> <handlogic>1</handlogic> <anim>GatherChop</anim> <maxrange>2</maxrange> <rate type="Tree">1.0 </rate> </action> <action> <name stringid="38127">VolleyRangedAttack</name> <type>Attack</type> <attackaction>1</attackaction> <rangedlogic>1</rangedlogic> <anim>Volley_standing_attack</anim> <reloadanim>Volley_standing_reload</reloadanim> <idleanim>Volley_standing_idle</idleanim> <maxheight>0</maxheight> <accuracy>1.0</accuracy> <accuracyreductionfactor>1.5</accuracyreductionfactor> <aimbonus>0</aimbonus> <maxspread>5</maxspread> <spreadfactor>0.25</spreadfactor> <trackrating>12</trackrating> <unintentionaldamagemultiplier>0.7</unintentionaldamagemultiplier> <projectile>InvisibleProjectile</projectile> <impacteffect>effects\impacts\gun</impacteffect> <minrange>2</minrange> <rate type="Unit">1.0 </rate> <throw>1</throw> <damage>13.000000</damage> <maxrange>12.000000</maxrange> <rof>2.000000</rof> <instantballistics>1</instantballistics> </action> <action> <name stringid="38130">VolleyHandAttack</name> <type>Attack</type> <maxrange>1.75</maxrange> <rate type="Unit">1.0 </rate> <attackaction>1</attackaction> <handlogic>1</handlogic> <speedboost>1</speedboost> <anim>Charge_attack</anim> <idleanim>Charge_idle</idleanim> <impacteffect>effects\impacts\melee</impacteffect> </action> <action> <name stringid="38136">DefendRangedAttack</name> <type>Attack</type> <attackaction>1</attackaction> <rangedlogic>1</rangedlogic> <anim>Volley_standing_attack</anim> <reloadanim>Volley_standing_reload</reloadanim> <idleanim>Volley_standing_idle</idleanim> <maxheight>0</maxheight> <accuracy>1.0</accuracy> <accuracyreductionfactor>1.5</accuracyreductionfactor> <aimbonus>0</aimbonus> <maxspread>5</maxspread> <spreadfactor>0.25</spreadfactor> <trackrating>12</trackrating> <unintentionaldamagemultiplier>0.7</unintentionaldamagemultiplier> <projectile>InvisibleProjectile</projectile> <impacteffect>effects\impacts\gun</impacteffect> <minrange>2</minrange> <rate type="Unit">1.0 </rate> <throw>1</throw> <damage>13.000000</damage> <maxrange>12.000000</maxrange> <rof>2.000000</rof> <instantballistics>1</instantballistics> </action> <action> <name stringid="38137">DefendHandAttack</name> <type>Attack</type> <maxrange>1.75</maxrange> <rate type="Unit">1.0 </rate> <attackaction>1</attackaction> <handlogic>1</handlogic> <speedboost>1</speedboost> <anim>Charge_attack</anim> <idleanim>Charge_idle</idleanim> <impacteffect>effects\impacts\melee</impacteffect> <damage>6.5</damage> <rof>1.0</rof> </action> <action> <name stringid="38129">StaggerRangedAttack</name> <type>Attack</type> <attackaction>1</attackaction> <rangedlogic>1</rangedlogic> <anim>Volley_standing_attack</anim> <reloadanim>Volley_standing_reload</reloadanim> <idleanim>Volley_standing_idle</idleanim> <maxheight>0</maxheight> <accuracy>1.0</accuracy> <accuracyreductionfactor>1.5</accuracyreductionfactor> <aimbonus>0</aimbonus> <maxspread>5</maxspread> <spreadfactor>0.25</spreadfactor> <trackrating>12</trackrating> <unintentionaldamagemultiplier>0.7</unintentionaldamagemultiplier> <projectile>InvisibleProjectile</projectile> <impacteffect>effects\impacts\gun</impacteffect> <minrange>2</minrange> <rate type="Unit">1.0 </rate> <throw>1</throw> <damage>13.000000</damage> <maxrange>12.000000</maxrange> <rof>2.000000</rof> <instantballistics>1</instantballistics> </action> <action> <name stringid="38132">StaggerHandAttack</name> <type>Attack</type> <maxrange>1.75</maxrange> <rate type="Unit">1.0 </rate> <attackaction>1</attackaction> <handlogic>1</handlogic> <speedboost>1</speedboost> <anim>Charge_attack</anim> <idleanim>Charge_idle</idleanim> <impacteffect>effects\impacts\melee</impacteffect> <damage>6.5</damage> <rof>1.0</rof> </action> <action> <name stringid="38135">MeleeHandAttack</name> <type>Attack</type> <maxrange>1.75</maxrange> <rate type="Unit">1.0 </rate> <attackaction>1</attackaction> <handlogic>1</handlogic> <speedboost>1</speedboost> <anim>Charge_attack</anim> <idleanim>Charge_idle</idleanim> <impacteffect>effects\impacts\melee</impacteffect> <damage>6.5</damage> <rof>1.0</rof> </action> <action> <name stringid="38118">BuildingAttack</name> <type>Attack</type> <rangedlogic>1</rangedlogic> <maxrange>6</maxrange> <rate type="LogicalTypeShipsAndBuildings">1.0 </rate> <attackaction>1</attackaction> <speedboost>1</speedboost> <anim>Raze_attack</anim> <idleanim>Raze_idle</idleanim> <impacteffect>effects\impacts\torch</impacteffect> <projectile>TorchProjectile</projectile> </action> <action> <name stringid="69147">Build</name> <type>Build</type> <anim>Build</anim> <active>0</active> <maxrange>0.2</maxrange> <rate type="WarHut">2.0</rate> <rate type="Corral">2.0</rate> <rate type="Teepee">2.0</rate> </action> <tactic> Volley <action priority="90">VolleyRangedAttack</action> <action priority="75">BuildingAttack</action> <action priority="25">VolleyHandAttack</action> <action priority="100">ChopAttack</action> <action>Gather</action> <action>NoWork</action> <action>CrateGather</action> <action>Hunting</action> <action>Build</action> <attacktype>LogicalTypeRangedUnitsAttack</attacktype> <autoattacktype>LogicalTypeRangedUnitsAutoAttack</autoattacktype> <attackresponsetype>LogicalTypeRangedUnitsAttack</attackresponsetype> <runaway>1</runaway> <autoretarget>1</autoretarget> <idleanim>Volley_standing_idle</idleanim> <boredanim>Volley_standing_bored</boredanim> <deathanim>Death_by_melee</deathanim> <walkanim>Volley_walk</walkanim> <joganim>Volley_jog</joganim> <runanim>Volley_run</runanim> </tactic> <tactic> Defend <action priority="90">DefendRangedAttack</action> <action priority="75">BuildingAttack</action> <action priority="25">DefendHandAttack</action> <action priority="100">ChopAttack</action> <action>Gather</action> <action>NoWork</action> <action>CrateGather</action> <action>Hunting</action> <action>Build</action> <attacktype>LogicalTypeRangedUnitsAttack</attacktype> <autoattacktype>LogicalTypeRangedUnitsAutoAttack</autoattacktype> <attackresponsetype>LogicalTypeRangedUnitsAttack</attackresponsetype> <runaway>0</runaway> <autoretarget>1</autoretarget> <idleanim>Defend_idle</idleanim> <boredanim>Defend_bored</boredanim> <deathanim>Death_by_melee</deathanim> <walkanim>Cover_walk</walkanim> <joganim>Cover_jog</joganim> <runanim>Cover_run</runanim> </tactic> <tactic> Stagger <action priority="100">StaggerRangedAttack</action> <action priority="75">BuildingAttack</action> <action priority="25">StaggerHandAttack</action> <action priority="90">ChopAttack</action> <action>Gather</action> <action>NoWork</action> <action>CrateGather</action> <action>Hunting</action> <action>Build</action> <attacktype>LogicalTypeRangedUnitsAttack</attacktype> <autoattacktype>LogicalTypeRangedUnitsAutoAttack</autoattacktype> <attackresponsetype>LogicalTypeRangedUnitsAttack</attackresponsetype> <runaway>0</runaway> <autoretarget>1</autoretarget> <idleanim>Cover_ranged_idle</idleanim> <boredanim>Cover_bored</boredanim> <deathanim>Death_by_melee</deathanim> <walkanim>Cover_walk</walkanim> <joganim>Cover_jog</joganim> <runanim>Cover_run</runanim> </tactic> <tactic> Melee <action priority="100">BuildingAttack</action> <action priority="25">MeleeHandAttack</action> <action priority="90">ChopAttack</action> <action>Gather</action> <action>NoWork</action> <action>CrateGather</action> <action>Hunting</action> <action>Build</action> <attacktype>LogicalTypeRangedUnitsAttack</attacktype> <autoattacktype>LogicalTypeRangedUnitsAutoAttack</autoattacktype> <attackresponsetype>LogicalTypeRangedUnitsAttack</attackresponsetype> <runaway>0</runaway> <autoretarget>1</autoretarget> <idleanim>Charge_idle</idleanim> <boredanim>Charge_bored</boredanim> <deathanim>Death_by_melee</deathanim> <walkanim>Charge_walk</walkanim> <joganim>Charge_jog</joganim> <runanim>Charge_run</runanim> </tactic> </tactics>
4.在殖民地民兵的动画xml添加attach、anim语句:
colonial_militia.xml - 记事本
____
□
X
文件(F) 编辑(E) 格式(O) 查看(V) 帮助(H)
<!-- converted from XMB to XML -->
<animfile> <definebone>bone_hat</definebone> <definebone>bone_gun</definebone> <definebone>bip01 Prop1</definebone> <definebone>Bip01 Prop2</definebone> <attachment> bowl <component> bowl <assetreference type="GrannyModel"> <file>units\attachments\bowl_villager</file> </assetreference> </component> <anim> Idle <component>bowl</component> </anim> </attachment> <attachment> knife <component> knife <assetreference type="GrannyModel"> <file>units\attachments\knife_villager</file> </assetreference> </component> <anim> Idle <component>knife</component> </anim> </attachment> <attachment> pickaxe <component> pickaxe <assetreference type="GrannyModel"> <file>units\attachments\pickaxe_villager</file> </assetreference> </component> <anim> Idle <component>pickaxe</component> </anim> </attachment> <attachment> axe <component> axe <assetreference type="GrannyModel"> <file>units\attachments\axe_villager</file> </assetreference> </component> <anim> Idle <component>axe</component> </anim> </attachment> <attachment> hoe <component> hoe <assetreference type="GrannyModel"> <file>units\attachments\hoe_villager</file> </assetreference> </component> <anim> Idle <component>hoe</component> </anim> </attachment> <attachment> hat <component> hat <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\colonial_militia_hat</file> </assetreference> </component> <anim> Idle <component>hat</component> </anim> </attachment> <attachment> torch <include>effects\projectiles\torch.xml</include> </attachment> <attachment> gun <component> gun <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\colonial_militia_gun</file> </assetreference> </component> <anim> Idle <component>gun</component> </anim> </attachment> <component> ModelComp <logic type="LowPoly"> <normal> <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\colonial_militia</file> </assetreference> </normal> <lowpoly> <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\lp_colonial_militia</file> </assetreference> </lowpoly> </logic> <decal> <effecttype>default</effecttype> <texture isfakeshadow="1">shadows_selections\shadow_circle_32x32</texture> <selectedtexture>shadows_selections\selection_circle_32x32</selectedtexture> <width>1.0</width> <height>1.0</height> </decal> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> <attach a="hat" frombone="bone_hat" tobone="HEAD" syncanims="0"/> </component> <anim> Death_by_melee <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_A</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.52</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_B</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.18</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_C</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.72</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Death_by_range <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_A</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.52</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_B</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.19</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_C</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.72</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Death_by_havoc <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_death</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_deathB</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_deathC</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_deathD</file> </assetreference> <component>ModelComp</component> </anim> <anim> Death_havoc_flail <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_flail</file> </assetreference> <component>ModelComp</component> </anim> <anim> Cheer <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_A</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_B</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_C</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_D</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_E</file> </assetreference> <component>ModelComp</component> </anim> <anim> Recoil <assetreference type="GrannyAnim"> <file>animation_library\shared\recoil_A</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\recoil_C</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\recoil_E</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\recoil_G</file> </assetreference> <component>ModelComp</component> </anim> <anim> HC_openDoor <assetreference type="GrannyAnim"> <file>animation_library\shared\doorOpen</file> </assetreference> <component>ModelComp</component> </anim> <anim> HC_closeDoor <assetreference type="GrannyAnim"> <file>animation_library\shared\doorClose</file> </assetreference> <component>ModelComp</component> </anim> <anim> Raze_Idle <assetreference type="GrannyAnim"> <file>animation_library\shared\torch_throw_idle</file> </assetreference> <component>ModelComp</component> <attach a="torch" frombone="ATTACHPOINT" tobone="L HAND" syncanims="0"/> </anim> <anim> Raze_Attack <assetreference type="GrannyAnim"> <file>animation_library\shared\torch_throwA</file> <tag type="Attack">0.61</tag> <tag type="SpecificSoundSet" checkvisible="1" set="TorchSwing">0.45</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\torch_throwB</file> <tag type="Attack">0.56</tag> <tag type="SpecificSoundSet" checkvisible="1" set="TorchSwing">0.44</tag> </assetreference> <component>ModelComp</component> <attach a="torch" frombone="ATTACHPOINT" tobone="L HAND" syncanims="0"/> </anim> <anim> Cover_ranged_idle <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_idle</file> </assetreference> <component>ModelComp</component> </anim> <anim> Cover_bored <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_bored</file> </assetreference> <component>ModelComp</component> </anim> <anim> Cover_Walk <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_walk</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.28</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.80</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Cover_Jog <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_jog</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.29</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.76</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Cover_Run <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_run</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.68</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.12</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Volley_standing_idle <assetreference type="GrannyAnim"> <file>animation_library\range\idle_rifleman_A</file> </assetreference> <component>ModelComp</component> </anim> <anim> Volley_standing_attack <assetreference type="GrannyAnim"> <file>animation_library\range\volley\volley_standing_fire</file> <tag type="Attack">0.37</tag> <tag type="SpecificSoundSet" checkvisible="1" set="SettlerGunShot">0.36</tag> <tag type="Particles" particlename="musketshot">0.36</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Volley_standing_reload <assetreference type="GrannyAnim"> <file>animation_library\range\volley\volley_standing_reload</file> </assetreference> <component>ModelComp</component> </anim> <anim> Volley_standing_bored <assetreference type="GrannyAnim"> <file>animation_library\range\bored_rifleman_A</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\bored_rifleman_B</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\bored_rifleman_C</file> </assetreference> <component>ModelComp</component> </anim> <anim> Volley_walk <assetreference type="GrannyAnim"> <file>animation_library\range\walk_crossbow_upper</file> <file>animation_library\shared\walk_generic_lower</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.14</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.61</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Volley_jog <assetreference type="GrannyAnim"> <file>animation_library\range\jog_rifleman_A</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.04</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.54</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Volley_run <assetreference type="GrannyAnim"> <file>animation_library\range\run_rifleman_A</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.13</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.60</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Defend_idle <assetreference type="GrannyAnim"> <file>animation_library\range\defend\defend_idle</file> </assetreference> <component>ModelComp</component> </anim> <anim> Defend_bored <assetreference type="GrannyAnim"> <file>animation_library\range\defend\defend_boredA</file> </assetreference> <component>ModelComp</component> </anim> <anim> Charge_idle <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_idleA</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_idleB</file> </assetreference> <component>ModelComp</component> </anim> <anim> Charge_bored <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_bored</file> </assetreference> <component>ModelComp</component> </anim> <anim> Charge_attack <assetreference type="GrannyAnim"> <file>animation_library\range\charge\cacadore_charge_attackA</file> <tag type="Attack">0.52</tag> <tag type="SpecificSoundSet" checkvisible="1" set="Swoosh">0.40</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\cacadore_charge_attackB</file> <tag type="Attack">0.52</tag> <tag type="SpecificSoundSet" checkvisible="1" set="Swoosh">0.40</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_attackA</file> <tag type="Attack">0.52</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_attackB</file> <tag type="Attack">0.71</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_attackC</file> <tag type="Attack">0.52</tag> <tag type="SpecificSoundSet" checkvisible="1" set="Swoosh">0.40</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Charge_Walk <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_walk</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.65</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.06</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Charge_Jog <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_jog</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.65</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.11</tag> </assetreference> <component>ModelComp</component> </anim> <anim> Charge_Run <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_runA</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.66</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.12</tag> </assetreference> <component>ModelComp</component> </anim> <anim> GatherChop <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_choptreeside</file> <tag type="Attack">0.66</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherWood">0.68</tag> </assetreference> <component>ModelComp</component> <attach a="axe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherMine <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gathermine1</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherCoin">0.86</tag> </assetreference> <component>ModelComp</component> <attach a="pickaxe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarm <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_gathefruit</file> <weight>50</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.33</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.57</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmsow</file> <weight>50</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.29</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.46</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.62</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.75</tag> </assetreference> <assetreference type="GrannyAnim"> <file>units\asians\shared\villager\villager_farm1</file> <weight>60</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.03</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.25</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.47</tag> </assetreference> <assetreference type="GrannyAnim"> <file>units\asians\shared\villager\villager_farm2</file> <weight>20</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.30</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.41</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.51</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.80</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.91</tag> </assetreference> <assetreference type="GrannyAnim"> <file>units\asians\shared\villager\villager_farm3</file> <weight>20</weight> </assetreference> <component>ModelComp</component> <attach a="bowl" frombone="" tobone="Bip01 Prop2" syncanims="0"/> </anim> <anim> GatherHunt <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherhunt1</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherMeat">0.46</tag> </assetreference> <component>ModelComp</component> <attach a="knife" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherBush <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_gathefruit</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFruit">0.33</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFruit">0.57</tag> </assetreference> <component>ModelComp</component> <attach a="bowl" frombone="" tobone="Bip01 Prop2" syncanims="0"/> </anim> <anim> GatherCrate <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gathercrate1</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFruit">0.56</tag> </assetreference> <component>ModelComp</component> </anim> <anim> GatherFarmWalk <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmwalk</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.33</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.73</tag> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarmHoe <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmhoe</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.14</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.28</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.39</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.65</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.76</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.89</tag> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarmSow <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmsow</file> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarmWeed <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmweed</file> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim>
</animfile>
截图中的民兵在工作时带了把枪,在前面的教程已经说过了,这是因为把枪的部件附加在了模型下面,会导致所有动作都会带着枪,解决办法是把模型下面的枪部件删除,然后原有的每一个动作都加上枪部件。
最终修改如下
colonial_militia.xml - 记事本
____
□
X
文件(F) 编辑(E) 格式(O) 查看(V) 帮助(H)
<!-- converted from XMB to XML -->
<animfile> <definebone>bone_hat</definebone> <definebone>bone_gun</definebone> <definebone>bip01 Prop1</definebone> <definebone>Bip01 Prop2</definebone> <attachment> bowl <component> bowl <assetreference type="GrannyModel"> <file>units\attachments\bowl_villager</file> </assetreference> </component> <anim> Idle <component>bowl</component> </anim> </attachment> <attachment> knife <component> knife <assetreference type="GrannyModel"> <file>units\attachments\knife_villager</file> </assetreference> </component> <anim> Idle <component>knife</component> </anim> </attachment> <attachment> pickaxe <component> pickaxe <assetreference type="GrannyModel"> <file>units\attachments\pickaxe_villager</file> </assetreference> </component> <anim> Idle <component>pickaxe</component> </anim> </attachment> <attachment> axe <component> axe <assetreference type="GrannyModel"> <file>units\attachments\axe_villager</file> </assetreference> </component> <anim> Idle <component>axe</component> </anim> </attachment> <attachment> hoe <component> hoe <assetreference type="GrannyModel"> <file>units\attachments\hoe_villager</file> </assetreference> </component> <anim> Idle <component>hoe</component> </anim> </attachment> <attachment> hat <component> hat <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\colonial_militia_hat</file> </assetreference> </component> <anim> Idle <component>hat</component> </anim> </attachment> <attachment> torch <include>effects\projectiles\torch.xml</include> </attachment> <attachment> gun <component> gun <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\colonial_militia_gun</file> </assetreference> </component> <anim> Idle <component>gun</component> </anim> </attachment> <component> ModelComp <logic type="LowPoly"> <normal> <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\colonial_militia</file> </assetreference> </normal> <lowpoly> <assetreference type="GrannyModel"> <file>units\infantry_ranged\colonial_militia\lp_colonial_militia</file> </assetreference> </lowpoly> </logic> <decal> <effecttype>default</effecttype> <texture isfakeshadow="1">shadows_selections\shadow_circle_32x32</texture> <selectedtexture>shadows_selections\selection_circle_32x32</selectedtexture> <width>1.0</width> <height>1.0</height> </decal><!-- <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> --> <attach a="hat" frombone="bone_hat" tobone="HEAD" syncanims="0"/> </component> <anim> GatherChop <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_choptreeside</file> <tag type="Attack">0.66</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherWood">0.68</tag> </assetreference> <component>ModelComp</component> <attach a="axe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherMine <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gathermine1</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherCoin">0.86</tag> </assetreference> <component>ModelComp</component> <attach a="pickaxe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarm <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_gathefruit</file> <weight>50</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.33</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.57</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmsow</file> <weight>50</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.29</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.46</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.62</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.75</tag> </assetreference> <assetreference type="GrannyAnim"> <file>units\asians\shared\villager\villager_farm1</file> <weight>60</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.03</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.25</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.47</tag> </assetreference> <assetreference type="GrannyAnim"> <file>units\asians\shared\villager\villager_farm2</file> <weight>20</weight> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.30</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.41</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.51</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.80</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.91</tag> </assetreference> <assetreference type="GrannyAnim"> <file>units\asians\shared\villager\villager_farm3</file> <weight>20</weight> </assetreference> <component>ModelComp</component> <attach a="bowl" frombone="" tobone="Bip01 Prop2" syncanims="0"/> </anim> <anim> GatherHunt <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherhunt1</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherMeat">0.46</tag> </assetreference> <component>ModelComp</component> <attach a="knife" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherBush <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_gathefruit</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFruit">0.33</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFruit">0.57</tag> </assetreference> <component>ModelComp</component> <attach a="bowl" frombone="" tobone="Bip01 Prop2" syncanims="0"/> </anim> <anim> GatherCrate <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gathercrate1</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFruit">0.56</tag> </assetreference> <component>ModelComp</component> </anim> <anim> GatherFarmWalk <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmwalk</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.33</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.73</tag> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarmHoe <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmhoe</file> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.14</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.28</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.39</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.65</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.76</tag> <tag type="SpecificSoundSet" checkvisible="1" set="GatherFarm">0.89</tag> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarmSow <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmsow</file> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> GatherFarmWeed <assetreference type="GrannyAnim"> <file>animation_library\villager\villager_male_gatherfarmweed</file> </assetreference> <component>ModelComp</component> <attach a="hoe" frombone="MASTER" tobone="Bip01 Prop1" syncanims="0"/> </anim> <anim> Death_by_melee <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_A</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.52</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_B</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.18</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_C</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.72</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Death_by_range <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_A</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.52</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_B</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.19</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\death_standing_rifleman_C</file> <tag type="SpecificSoundSet" checkvisible="1" set="RagdollImpact">0.72</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Death_by_havoc <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_death</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_deathB</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_deathC</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_deathD</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Death_havoc_flail <assetreference type="GrannyAnim"> <file>animation_library\range\havoc_flail</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Cheer <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_A</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_B</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_C</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_D</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\cheer_E</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Recoil <assetreference type="GrannyAnim"> <file>animation_library\shared\recoil_A</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\recoil_C</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\recoil_E</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\recoil_G</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> HC_openDoor <assetreference type="GrannyAnim"> <file>animation_library\shared\doorOpen</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> HC_closeDoor <assetreference type="GrannyAnim"> <file>animation_library\shared\doorClose</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Raze_Idle <assetreference type="GrannyAnim"> <file>animation_library\shared\torch_throw_idle</file> </assetreference> <component>ModelComp</component> <attach a="torch" frombone="ATTACHPOINT" tobone="L HAND" syncanims="0"/> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Raze_Attack <assetreference type="GrannyAnim"> <file>animation_library\shared\torch_throwA</file> <tag type="Attack">0.61</tag> <tag type="SpecificSoundSet" checkvisible="1" set="TorchSwing">0.45</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\shared\torch_throwB</file> <tag type="Attack">0.56</tag> <tag type="SpecificSoundSet" checkvisible="1" set="TorchSwing">0.44</tag> </assetreference> <component>ModelComp</component> <attach a="torch" frombone="ATTACHPOINT" tobone="L HAND" syncanims="0"/> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Cover_ranged_idle <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_idle</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Cover_bored <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_bored</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Cover_Walk <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_walk</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.28</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.80</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Cover_Jog <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_jog</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.29</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.76</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Cover_Run <assetreference type="GrannyAnim"> <file>animation_library\range\cover\cover_run</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.68</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.12</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Volley_standing_idle <assetreference type="GrannyAnim"> <file>animation_library\range\idle_rifleman_A</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Volley_standing_attack <assetreference type="GrannyAnim"> <file>animation_library\range\volley\volley_standing_fire</file> <tag type="Attack">0.37</tag> <tag type="SpecificSoundSet" checkvisible="1" set="SettlerGunShot">0.36</tag> <tag type="Particles" particlename="musketshot">0.36</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Volley_standing_reload <assetreference type="GrannyAnim"> <file>animation_library\range\volley\volley_standing_reload</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Volley_standing_bored <assetreference type="GrannyAnim"> <file>animation_library\range\bored_rifleman_A</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\bored_rifleman_B</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\bored_rifleman_C</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Volley_walk <assetreference type="GrannyAnim"> <file>animation_library\range\walk_crossbow_upper</file> <file>animation_library\shared\walk_generic_lower</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.14</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.61</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Volley_jog <assetreference type="GrannyAnim"> <file>animation_library\range\jog_rifleman_A</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.04</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.54</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Volley_run <assetreference type="GrannyAnim"> <file>animation_library\range\run_rifleman_A</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.13</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.60</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Defend_idle <assetreference type="GrannyAnim"> <file>animation_library\range\defend\defend_idle</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Defend_bored <assetreference type="GrannyAnim"> <file>animation_library\range\defend\defend_boredA</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Charge_idle <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_idleA</file> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_idleB</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Charge_bored <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_bored</file> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Charge_attack <assetreference type="GrannyAnim"> <file>animation_library\range\charge\cacadore_charge_attackA</file> <tag type="Attack">0.52</tag> <tag type="SpecificSoundSet" checkvisible="1" set="Swoosh">0.40</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\cacadore_charge_attackB</file> <tag type="Attack">0.52</tag> <tag type="SpecificSoundSet" checkvisible="1" set="Swoosh">0.40</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_attackA</file> <tag type="Attack">0.52</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_attackB</file> <tag type="Attack">0.71</tag> </assetreference> <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_attackC</file> <tag type="Attack">0.52</tag> <tag type="SpecificSoundSet" checkvisible="1" set="Swoosh">0.40</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Charge_Walk <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_walk</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.65</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.06</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Charge_Jog <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_jog</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.65</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.11</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> <anim> Charge_Run <assetreference type="GrannyAnim"> <file>animation_library\range\charge\charge_runA</file> <tag type="FootstepLeft" footprinttype="HumanLeft">0.66</tag> <tag type="FootstepRight" footprinttype="HumanRight">0.12</tag> </assetreference> <component>ModelComp</component> <attach a="gun" frombone="bone_gun" tobone="bip01 Prop1" syncanims="0"/> </anim> </animfile>
最终效果:
不加上村民标签: