找回密码
 点一下
查看: 12550|回复: 30

无聊发个演示~~让单位像母舰一样原地转圈飞行~~

[复制链接]
发表于 2011-2-21 23:04:30 | 显示全部楼层 |阅读模式
其实这是来自于BN上老外问的一个问题~~所以我给他做了个演示~~于是顺便贴到GA好了~~

MotherShip之所以能旋转,模型本身占了很大因素,因为它的模型可以分离成2部分。扇面部分依附于附着位点TurretZ。而SC2可以用CActorTurret类直接令一个附着位点进行旋转,并可以用CTurret控制旋转参数。所以母舰的扇面部分才会不断旋转,这并非是模型本身的动作。

但是对绝大部分模型来说,并没有分离成多个部分。那么如果我希望让一个单位也能原地打转,而且移动的时候不出现朝向问题怎么做呢?

虽然我们可以通过发送Actor消息SetRotation来直接设定Actor的朝向。然后用周期性事件来触发。但这就要用到触发器,而且实际效果很糟糕,因为在单位移动的时候设定朝向没有用。

实际上最好的方法还是用CActorTurret。既然CActorTurret类可以令一个附着位点进行旋转,那么在这个附着位点上的附着的actor自然也会跟着旋转了咯。所以我们只需要用一个至少带一个附着位点(方向是垂直向上为最佳)的没图像的模型作为单位本体,用CActorTurret令其旋转。然后将单位的actor附着上去就好了。

严格来说,其实也不是一定需要没图像的模型,你拿一个有图像的模型然后将其隐藏也可以。但是毕竟用没图像的比较正式一点。

恰巧SC2里就有这样的辅助模型。


但是将一个单位Actor直接附着到一个不可见模型上和向一个单位身上附着一些附着效果还是有点不同的。除了不能忘记各种Actor事件外。最重要的就是_Selectable别名和_Unit别名千万不能忘记。_Selectable别名直接决定了选择圈画在哪个Actor上。而_Unit别名更重要了,各种附着效果需要通过它来得知应该附着在哪里。

举个最简单的例子,如果你直接将指挥中心的Actor附着到不可见模型上去,那么当指挥中心起火的时候,你看不到起火的特效。被单位攻击的时候,模型上也没有子弹打中的效果。因为这些特效是指向_Unit的,也就是那个不可见模型。而且不可见模型的默认选择圈是0,如果你没有设定_Selectable别名那么选中以后会发现没有选择圈。

另外如果你附着的模型是CActorModel类的话,还要记得设置BSD(出生、站立、死亡动作),否则默认还不一定会播放Stand动作。另外还需要勾上属性继承里要继承的那些东西,比如隐身效果。否则就会出现比如说你隐身了,但是模型上没有隐身特效这样的瑕疵。而如果你直接将CActorUnit类附着上去的话呢,就可以免去这一系列麻烦事儿,然而却有一个很糟糕的缺陷是,放在地图上正常,从兵营训练出来也正常,但是如果是直接作为建筑物建造出来,那么会无法正常旋转……所以如果你的单位不需要建造,那么用CActorUnit类来作为附着物更方便,如果是需要建造的建筑物呢,那还是用CActorModel类。需要注意的是,作为基底的不可见模型Actor的类必须是CActorUnit才行,否则是会变成球的。

另外也要注意很多别名冲突的问题,由于你附着的Actor也加了_Selectable和_Unit这两个别名,而本体如果也有这两别名(默认都是有的)。那么千万要注意别名冲突的问题。比如当你创建附着Actor的时候,宿主那里就必须直接填写基底Actor的名字了。如果用默认的_Selectable,那么就算创建上去了也会附着失败,因为你自己也是_Selectable,如何附着到_Selectable的附着位点上呢?造成死循环了,Actor系统就会自动Fallback,创建到默认位置去了。创建CActorTurret的时候也要注意,炮台本体必须是基底Actor才行。

研究Actor系统是很花时间的,因为一个小小的效果可能也需要你反复失败几百次才能弄出完美结果来。但是这和它的强大程度是成正比的。而且在这不断失败的过程中,大家Actor系统的经验值就可以大大飞升啦。

如果附着物采用CActorModel类的话,基底Actor最好直接用单位原本的Actor,只是把建造模型和本身模型这两栏改为不可见模型就好。毕竟很多事情是CActorModel类做不到的,比如自定义死亡,单位语音什么的。所以有条件的时候附着物Actor最好还是直接用CActorUnit,如果真的不行,那么则交给基底Actor来做。



下面这个演示就是两种一边飞行一边旋转的单位,轨道指挥部和飞行地堡。一个是用CActorModel做的外形,另一个是用CActorUnit。地堡是用CActorModel做的,因为需要建造,而轨道指挥部是变形出来的,无需建造。



我特地修改了下地堡的建造Actor,让它能在空中边转圈边完成建造,这个比较好玩。
Screenshot2011-02-21 22_47_02.jpg
Screenshot2011-02-21 22_47_42.jpg
Screenshot2011-02-21 22_48_11.jpg

scc.SC2Map

21 KB, 下载次数: 295

 楼主| 发表于 2011-2-21 23:18:06 | 显示全部楼层
顺便~~随便选中一个单位按C的话可以看到一个好玩的效果~~
回复

使用道具 举报

发表于 2011-2-21 23:19:32 | 显示全部楼层
下载学习~
回复

使用道具 举报

 楼主| 发表于 2011-2-21 23:23:19 | 显示全部楼层
重新下一下,我刚才那个发错版本。
回复

使用道具 举报

发表于 2011-2-21 23:23:29 | 显示全部楼层
先膜拜 再下載
回复

使用道具 举报

发表于 2011-2-21 23:38:46 | 显示全部楼层
何等V5...那碉堡能當個新兵種飛碟用了...
回复

使用道具 举报

 楼主| 发表于 2011-2-21 23:42:07 | 显示全部楼层
当然其实用CActorModel还是不及用CActorUnit完美~~有一些瑕疵在~~所以大家尽量用CActorUnit的好~~
回复

使用道具 举报

发表于 2011-2-21 23:51:33 | 显示全部楼层
原來炮臺的Actor還能這麼設置。
那如果我給假設女妖戰機也加個炮臺。
炮臺的Actor也設置源點,把武器設置移動開火。
是不是也能像鳳凰戰機那樣一邊移動一邊開火同時一邊把頭對向目標?
回复

使用道具 举报

 楼主| 发表于 2011-2-21 23:59:54 | 显示全部楼层
自然可以啊~~

之前也许很多同学有误解,认为TurretZ这个附着点本身就有个旋转动作。所以才能带动飞弹塔和MotherShip来旋转。其实不是。旋转是由炮台Actor实现的。所以任何一个附着位点都能旋转,只是一般的模型没有可以分开的部分而已,所以看不出附着位点在旋转。但是只要你在上面附加东西,它们也就会跟着转。
回复

使用道具 举报

发表于 2011-2-22 00:02:33 | 显示全部楼层
確實誤解了
一直以為只能用TurretZ其他的就不行也沒去實驗過,這次學習了
回复

使用道具 举报

发表于 2011-2-22 03:17:02 | 显示全部楼层
挺好玩,我们做个UFO大战吧

不过问题依然存在,以非T-Z为旋转点是可以设置成功并旋转,但并不是所有位置都能正确显示
我试了几个overhead显示的位置都被移至host的中心点
未命名.jpg

scc_lololol.SC2Map

41 KB, 下载次数: 42

回复

使用道具 举报

发表于 2011-2-22 13:52:40 | 显示全部楼层
关于楼上的问题很早就发现过 以炮台方式的旋转和ModelAddition(连续 Setfacing) 所添加的模型 都是并非所有的附加点都可以旋转的

如常见的SOpAttachOrigin=可 而SOpAttachOverhead=不可
原因不明 也许和其他相关的设置有关~
回复

使用道具 举报

发表于 2011-2-22 23:44:31 | 显示全部楼层
瞎了狗眼。
回复

使用道具 举报

 楼主| 发表于 2011-2-24 02:17:03 | 显示全部楼层
Overhead怎么就不可以了~~只是它旋转时附着物会落到单位中心而已~~并不是说它fallback到其它附着点去了~~
回复

使用道具 举报

发表于 2011-6-20 23:37:21 | 显示全部楼层
这个演示我自己试验了下,发现有两个问题,想请问一下。

一是,如果使用两个单位的Actor的话,系统会报错的,而且勾选抑制报错的旗标也不管用。

二是,如果使用模型Acor的话,貌似是没有行走动画的,不知道有没有办法解决呢?
回复

使用道具 举报

发表于 2011-6-21 08:48:32 | 显示全部楼层
第一,做这个演示是很早的事情。当时的版本不会报错。


第二,这个已经太老了。我现在已经有了更完美的法子来实现这个。其实就是倒过来,基座用CActorModel。而旋转的部分变成单位本体。操作流程也会简化很多。


一会儿发个新版吧。

点评

你说的本体演算体设为旋转部分,模型演算体设为基座是这样吗?我改的女妖轰炸机,但哪好像不对 出错了,能帮看下嘛  详情 回复 发表于 2017-10-11 21:34
回复

使用道具 举报

发表于 2011-6-21 10:32:03 | 显示全部楼层
按头目说的方法做了一个机枪兵,疯狂旋转不头晕。

不过有个问题是把单位直接放在地图上的话,在编辑器中是不显示的,应该怎么解决呢?

scc 2.SC2Map

24 KB, 下载次数: 29

回复

使用道具 举报

 楼主| 发表于 2011-6-21 10:51:39 | 显示全部楼层
方法可以很多,比如做延时附着,一开始不附着,等几秒再附着。
回复

使用道具 举报

发表于 2011-6-21 10:59:35 | 显示全部楼层
这个是必须要单位附加炮台,我若是希望有行为才能旋转,貌似跟炮台无关了···
回复

使用道具 举报

发表于 2011-6-21 11:01:22 | 显示全部楼层
只要你事先在单位身上放上炮台,那就可以用行为来控制这个炮台和actor的附着和反附着。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 17:40 , Processed in 0.087068 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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