找回密码
 点一下
查看: 984|回复: 8

[問題]關於變身升級系統問題

[复制链接]
发表于 2010-5-6 12:39:05 | 显示全部楼层 |阅读模式
我做了一個類似人族主堡升級的技能
我把它套在軍營上,然後把它改成”升級成指揮中心" 相關係數也照著原本的技能跟著改變成指揮中心

但是不知道是不是因為套在軍營上,升級完成後,模組並沒有改變,不過其他的都有改變 血量,裝甲,名字,等等 (觸發器也指的到指揮中心)

不曉得有沒有大大可以幫忙解惑`
发表于 2010-5-6 12:53:44 | 显示全部楼层
是这样的,需要变形的单位的Actor定义有很大的不同。 以下用VikingAssault和VikingFighter为例。
先需要对变形单位A和B进行定位,父类需要指定为GenericUnitBase和GenericUnitMorph;
需要追加的相关Event如下:
VikingAssault
  1.     <On Terms="AbilMorph.*.Finish; MorphTo VikingAssault" Send="Create"/>
  2.         <On Terms="AbilMorph.*.Start; MorphFrom VikingAssault" Send="Destroy"/>
复制代码

VikingFighter-可有可无
  1.     <On Terms="AbilMorph.*.Finish; MorphTo VikingFighter" Send="Create"/>
  2.         <On Terms="AbilMorph.*.Start; MorphFrom VikingFighter" Send="Destroy"/>
复制代码

其次还要定义的AToB和BToA的2两个中间模型(可以是A,B本身),父类都需要指定为GenericUnitBaseMorphTransition。
需要追加的相关Event如下:
AssaultMorphModel
  1.     <On Terms="AbilMorph.*.Start; MorphTo VikingAssault" Send="Create"/>
  2.         <On Terms="AbilMorph.*.Start; MorphTo VikingAssault" Send="AnimPlay Start Morph,Start PlayForever,NonLooping"/>
  3.         <On Terms="AbilMorph.*.Finish; MorphFrom VikingAssault" Send="Destroy"/>
  4.         <On Terms="AbilMorph.*.Finish; MorphFrom VikingFighter" Send="Destroy"/>
复制代码

FighterMorphModel
  1.         <On Terms="AbilMorph.*.Start; MorphTo VikingFighter" Send="Create"/>
  2.         <On Terms="AbilMorph.*.Start; MorphTo VikingFighter" Send="AnimPlay End Morph,End PlayForever,NonLooping"/>
  3.         <On Terms="AbilMorph.*.Finish; MorphFrom VikingFighter" Send="Destroy"/>
  4.         <On Terms="AbilMorph.*.Finish; MorphFrom VikingAssault" Send="Destroy"/>
复制代码

这样才能完成模型之间的转换。

具体内容参照VikingFighter的变形即可^_^
回复

使用道具 举报

 楼主| 发表于 2010-5-6 13:28:53 | 显示全部楼层
是Model  0.0
父类指定有點不太瞭解...
我再試著去摸.
回复

使用道具 举报

发表于 2010-5-6 13:37:08 | 显示全部楼层
对于变形技能来说,Abil-Model-Actor缺一不可的。
如果只是定义了2中单位的Model,但没有追加相对应的Actor的话,属性会转移到变形后的单位,但是模型并不会变化。

Actor 可以被理解为模型控制器;作用是控制模型的动作,声音,Actiong等...。
回复

使用道具 举报

 楼主| 发表于 2010-5-6 13:42:01 | 显示全部楼层
不過我看Command center的飛行與轉換成 Orbital Command 好像沒有Morph這類的
是建築物比較特殊嗎?
回复

使用道具 举报

发表于 2010-5-6 14:04:23 | 显示全部楼层
指挥中心不是特殊 而是它本身M3附带全部的模型  不管是炮台还是雷达还是普通CC 都是一个M3中的

而维京空中和维京地面是2个不同的M3
回复

使用道具 举报

发表于 2010-5-6 14:08:11 | 显示全部楼层
建筑物的变形和普通兵种的变形是一样的。
关键在于<On Terms="....“/>的追加和定义,而不是他们父类是谁(继承父类只是为了让你少写很多东西)

简单分析一下^_^~


先说一下GenericUnitStandard,GenericUnitMorph的区别。

GenericUnitMorph为GenericUnitStandard的子类。
CActorUnit
+-GenericUnitMinimal
    +-GenericUnitSelectable
      +-GenericUnitBase
        +-GenericUnitStandard
                   +-GenericUnitMorph


因此如果手动定义了以下的属性,则变形单位的父类都可以是GenericUnitStandard。
  1.     <UnitFlags index="StandAnimBirthVariation" value="0"/>
  2.         <On Terms="AbilMorph.*.Finish; MorphTo ##id##" Send="Create"/>
  3.         <On Terms="AbilMorph.*.Start; MorphFrom ##id##" Send="Destroy"/>
复制代码
以上是GenericUnitMorph比父类GenericUnitStandard多的属性。

对于单位A,B的父类可以都定义为GenericUnitStandard,GenericUnitMorph的。
一般来说,原单位为GenericUnitStandard,变形对象单位为GenericUnitMorph。



下面看一下CommandCenter和OrbitalCommand 的如何定义的。

CommandCenter和OrbitalCommand的父类为TerranBuildingFlyer
而TerranBuildingFlyer的定义如下
GenericUnitStandard
  +-TerranBuilding
        +-TerranBuildingFlyer
所以说它实际上还是继承于GenericUnitStandard的~~

而CommandCenter中,定义了以下的属性。
  1.         <On Terms="AbilMorph.*.Finish; MorphFrom CommandCenter; MorphTo OrbitalCommand" Send="Destroy"/>
  2.         <On Terms="AbilMorph.*.Start; MorphFrom CommandCenter; MorphTo OrbitalCommand" Send="AnimGroupApply B"/>
  3.         <On Terms="AbilMorph.*.Start; MorphFrom CommandCenter; MorphTo OrbitalCommand" Send="AnimBaselineStop"/>
  4.         <On Terms="AbilMorph.*.Start; MorphFrom CommandCenter; MorphTo OrbitalCommand" Send="AnimPlay Morph Morph 0 0.000000"/>
  5.         <On Terms="AbilMorph.*.Cancel; MorphFrom CommandCenter; MorphTo OrbitalCommand" Send="AnimClear Morph"/>
  6.         <On Terms="AbilMorph.*.Cancel; MorphFrom CommandCenter; MorphTo OrbitalCommand" Send="AnimGroupRemove B"/>
  7.         <On Terms="AbilMorph.*.Cancel; MorphFrom CommandCenter; MorphTo OrbitalCommand" Send="AnimBaselineStart"/>
  8.         <On Terms="AbilMorph.*.Finish; MorphFrom CommandCenter; MorphTo PlanetaryFortress" Send="Destroy"/>
  9.         <On Terms="AbilMorph.*.Start; MorphFrom CommandCenter; MorphTo PlanetaryFortress" Send="AnimGroupApply A"/>
  10.         <On Terms="AbilMorph.*.Start; MorphFrom CommandCenter; MorphTo PlanetaryFortress" Send="AnimBaselineStop"/>
  11.         <On Terms="AbilMorph.*.Start; MorphFrom CommandCenter; MorphTo PlanetaryFortress" Send="AnimPlay Morph Morph 0 0.000000"/>
  12.         <On Terms="AbilMorph.*.Cancel; MorphFrom CommandCenter; MorphTo PlanetaryFortress" Send="AnimClear Morph"/>
  13.         <On Terms="AbilMorph.*.Cancel; MorphFrom CommandCenter; MorphTo PlanetaryFortress" Send="AnimGroupRemove A"/>
  14.         <On Terms="AbilMorph.*.Cancel; MorphFrom CommandCenter; MorphTo PlanetaryFortress" Send="AnimBaselineStart"/>
  15.         <On Terms="AbilMorph.UpgradeToPlanetaryFortressFast.Finish; MorphFrom CommandCenter; MorphTo PlanetaryFortress" Send="Destroy"/>
  16.         <On Terms="AbilMorph.UpgradeToPlanetaryFortressFast.Start; MorphFrom CommandCenter; MorphTo PlanetaryFortress" Send="AnimPlay Morph Morph,A 0 0.000000 0.000000 5.000000 AsDuration"/>
复制代码

可以看出关于变形相关的设定关键在于
AbilMorph.*.Start/Finish/Cancel; MorphFrom xxx; MorphTo xxxx


----------- 帖子于 14:08 更新 --------- 之前内容发布于 14:05 ------------

而GenericUnitBaseMorphTransition,则是为变形中间单位定义的。

A -> c  -> B

c就是中间单位,可以查看Tank相关的模型TankModeMorphModel,SiegeModeMorphModel来了解一下。

建筑变形一般不定义中间单位,所以看不到GenericUnitBaseMorphTransition相关的设定:)
回复

使用道具 举报

 楼主| 发表于 2010-5-6 14:16:13 | 显示全部楼层
感謝指導 
先去上課了
回复

使用道具 举报

发表于 2010-5-6 14:21:29 | 显示全部楼层
没事呢,分析实际也是为自己更加熟悉架构打基础的~这样才能一起进步的说
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-9-28 19:15 , Processed in 0.049790 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表