找回密码
 点一下
查看: 1611|回复: 5

特殊形狀的AOE技能製作--持續性效果版(不使用飛彈)

[复制链接]
发表于 2013-8-17 06:37:33 | 显示全部楼层 |阅读模式
本帖最后由 playif 于 2013-8-17 06:45 编辑

有鑒於許多"花式"AOE都是依靠飛彈來完成,大部份的做法都是在飛彈上綁一個持續性Effect,然後不斷搜尋彈道上經過的敵人。這樣的做法變化很多,也很方便,不過需要對彈道(Mover)有一定程度的瞭解,使用起來才會比較順手。
於是我試著思考一些不需要依靠飛彈,也能夠製作的AOE效果,內容包含我所有想到的做法和變化,雖然有點零亂,還是希望和大家分享
本篇教程的重點就在於製作簡單,且富有修改彈性的AOE技能。文章分三個部分,第一部分主要是著重Effect 之間的溝通,第二部分提一下簡單的路徑呈現的做法,第三部分補充施放AOE 會用到的UI介面的設計。

AOE Effect
最簡單的AOE不外乎使用Search Effect,來製作圓形或弧度的AOE,但若是想做更複雜的形狀又不想用飛彈,
就得靠持續性Effect來達成了,因為他除了能夠週期性的呼叫其他Effect,最重要的是,他可以"位移"(Offset)
位移包含起始位移,週期性位移,結束時的位移等等,我們需要先理解如何去使用他。
首先在Offset 的欄位裡面,他給你的一組三度空間的座標,到底代表什麼意思呢?
間單的說,(x,y,z)中,x代表左右,y代表前後,z代表上下,是一組相對方向的位移。
因此(0,-1,0)是朝前方位移一個單位(在彈道或其他部分都是一樣的道理),(-1,0,0)是朝右方移動一格。
(需要先補充一下,所謂移動"一格"或"一個單位",就是地形編輯器上可以看到的最小格線,也可以按Ctrl + M 使用工具來測量距離)
不過這個基本方向是取決於Location offset start 和 Location offset end這兩個欄位,預設是從施展該持續性effect 的單位看向目標位置。
另外所有的offset 都是不能疊加的(後面會說明如何突破),因此,如果想要"往前5格",每次移動一格,你需要在PeriodicOffset 欄位分別加入以下五個位置:
        <PeriodicOffsetArray value="0,-1,0"/>
        <PeriodicOffsetArray value="0,-2,0"/>
        <PeriodicOffsetArray value="0,-3,0"/>
        <PeriodicOffsetArray value="0,-4,0"/>
        <PeriodicOffsetArray value="0,-5,0"/>

另外,要記得將PeriodCount設成5,Target Location 設成Source。還有,如果有設置一個延遲時間(有時你希望他不是瞬間完成的,而是像衝擊波一樣衝出去),那你可能會需要設置initial effect (initial offset 設成0,-1,0),然後PeriodicOffset 則從(0,-2,0)開始,這樣可以避免施法開始時的一點延遲時間,否則你就需要定義每個週期時間(0, 0.1, 0.1, 0.1,...)。

還有一點要注意的是,offset 沒有提供比例值 (無法根據起點到目標的距離做縮放),所以有時你可能無法確定你能夠擊中目標。
不過既然是AOE,我想主要還是思考我們想要在地圖上函蓋一個怎樣的形狀就好,不用管目標的位置(以目標為中心的情況除外),目標位置只是提供一個方向性,這樣比較好思考。



好,基礎會了,到這裡為止,還是只能做出很土的AOE,而且你總是需要手動指定每一個位移點(offset),看到這大概很多人想跳槽用導彈了。


先等一下! 我這裡目前有幾個技巧可以延伸持續性效果的用處。
1. 使用雙重持續性effect:
就像雙層迴圈一樣,外層決定目標位置(方向),內層使用直線AOE(如前段所述),外層呼叫內層,每次呼叫都可以產生一條直線。
於是你可以很容易做出朝n個方相射出去的直線:
f1.png
外層的PeriodicOffset  如下:
        <PeriodicOffsetArray value="0,-10,0"/>
        <PeriodicOffsetArray value="4,-10,0"/>
        <PeriodicOffsetArray value="-4,-10,0"/>

應該不難理解,三個目標點都在前方10格的位置,一個偏左,一個偏右,還有一個在中間(注意外層不需要間隔時間,只有內層需要,除非你想讓他有順時鐘依序放射線條的感覺)。

如果你想要以自己為中心,來個十字型,可將外層的PeriodicOffset  設置如下 (注意這個例子外層只是決定方向,無法影響內層的一個線段的長度):
        <PeriodicOffsetArray value="0,-1,0"/>
        <PeriodicOffsetArray value="-1,0,0"/>
        <PeriodicOffsetArray value="0,1,0"/>
        <PeriodicOffsetArray value="1,0,0"/>
(記得count 要改成4)

如果將內層的Target Location 設成target point,則內層可以看成一個"樣板",你不一定要用成直線,可以是ㄑ字型,O字型,U字型,或各種形狀(注意是以target point 為中心),然後靠外層來決定這些圖案要印在哪裡,感覺就像是在畫點陣圖一樣...
f2.png
(四個開口朝外的U 字型,外層四個點,內層7個點,共執行4*7=28次搜尋effect)
當然,熟悉之後也可以使用三層持續性effect,端看需求。


2. 使用"遞迴"持續性effect:
恩...名子可能取的不太清楚,總之就是持續性effect 反複呼叫自己,而達到"位移(offset)"可以累積的效果
你可以把自己(當前的持續性effect)掛在Effect - Expire/Final上(就是自己呼叫自己的意思啦),不過要注意的是,這樣通常會造成無窮迴圈,
你一定要透過驗證器來設定終止條件,驗證的方法很多(目標距離施法者多遠之類的),而且你一定要保正他有完成的一天,如果是想以遞迴的"次數"來限制的話,可以參考這篇,使用marker來達成。
還有一點要注意,使用這個方法,每次呼叫自己時,一定要有一點點delay time,不然會有bug跳出來。


以下是直線AOE 的改良版,現在你不需要指定每一個點,還可以自由的定義長度,只需要一個持續性effect 和一個驗證器就可以達到 (搜尋跟傷害那些不算):
f3.png
    <CEffectCreatePersistent id="MyLoopEffect">
        <ValidatorArray value="MyRange"/>
        <InitialDelay value="0.0625"/>
        <ExpireEffect value="MyLoopEffect"/>
        <ExpireOffset value="0,-1,0"/>
        <PeriodCount value="1"/>
        <PeriodicEffectArray value="MyTestSearch"/>
        <PeriodicOffsetArray value="0,-1,0"/>
    </CEffectCreatePersistent>


    <CValidatorLocationCompareRange id="MyRange">
        <Compare value="LT"/>
        <Range value="30"/>   (設定長度在此)
    </CValidatorLocationCompareRange>


只要稍微調整一下上面例子,還可以創造出螺旋型的效果(因為圖片看不到完整軌跡,為了效果顯注,我連續施放了好幾次):
f4.png
<ExpireOffset value="-1,-0.01,0"/>


又或者你希望他繞著你轉(會跟著你移動):
f5.png
    <CEffectCreatePersistent id="MyLoopEffect">
        <ValidatorArray value="MyCoolDown"/> (改變驗證器,否則他永遠不會超出範圍)
        <EditorCategories value=""/>
        <InitialDelay value="0.0625"/>
        <ExpireEffect value="MyLoopEffect"/>
        <ExpireOffset value="-1,0.2,0"/>   (向後0.2 才不會飛走,可以改變y值決定圈圈大小,改變x值決定轉速)
        <PeriodCount value="1"/>
        <PeriodicEffectArray value="MyTestSearch"/>
    </CEffectCreatePersistent>


    <CValidatorUnitCompareCooldown id="MyCoolDown">
        <WhichUnit Value="Caster"/>
        <Compare value="NE"/>
        <CooldownLink value="Abil/MyTest1"/>
        <Ability value="MyTest1"/>
        <Value value="1"/>
    </CValidatorUnitCompareCooldown>



當然,除了自己呼叫自己,你也可以先使用搜尋effect,然後做一些事,最後再連回自己(像製作連鎖閃電那樣)。或是結合前述雙層持續性effect的技巧做出各種變化。

還有別忘了可以設置隨機性位移(random offset 在flag 欄位),看到這裡,就知道這代表不只可以設置隨機位移,你還可以做出隨機方向!
總之變化很多,甚至不輸使用飛彈的效果,比的還是創意囉。

動畫呈現(Actor 的設置)
由於不用飛彈,必定會遇到一個問題,便是要如何呈現動畫(或軌跡),當然如果有一個剛好滿足你設計的AOE形狀的模型動畫是最好不過,不過難免不是那麼好運,以下我提出一個非常簡單的解決方案。
直接在主要用到的search effect (就是被持續性Effect 不斷呼叫的那個)綁上一個一次性動畫:
    <CActorModel id="MyTestSearchEffect" parent="ModelAnimationStyleOneShot">
        <On Terms="Effect.MyTestSearch.Start" Send="Create"/>
        <Model value="CorrosiveAcidImpact"/>
    </CActorModel>
只需要記得繼承ModelAnimationStyleOneShot,然後加上effect的事件,最後選一個XXXX Impact 的動畫就完成了(上面的例子都是這樣完成的)。


施法UI設計
你總會希望你的AOE 讓玩家在施放的時候有一個好的提示,目前暴雪提供3種UI (就我所知),分別是圓形,弧形,和長條型。
1. 圓型:
這應該不用講了,就是splat actor,重點是在技能那設置一個搜尋的effect,然後創一個新的splat actor (要繼承cursor splat),最後設定一下觸發技能就OK 了。

2. 弧形:
應該是蟲心才加入對應模型的,總之一樣在技能那裡設置一個搜尋的effect (角度需小於90度),然後創一個新的Arc actor (要繼承GuideVisualArc),最後設定一下觸發技能就OK 了。
f6.png
(目前有兩個模型,一紫一紅,搞不懂為何不做個白色的讓我們可以自由染色就好...)

3. 長條型:
這個好像不用設置搜尋effect,直接創一個新的Quad actor (要繼承ZergGuideVisualQuadDown 或 ZergGuideVisualQuadRed),最後設定一下觸發技能、和寬就OK 了。
另外他還有一個叫Quad 的欄位,是一個比例值,全設+/-0.5 的話,你就會在矩型的中間,你可以參考預設值,x 是 [-0.5,0.5],y是[-1,0],所以矩形會在你正前方(朝游標方向)。
f7.png
(模型一樣一紫一紅,可是他有分成前(連接hero)中(反複出現達到伸縮的目的)後(尖尖的那段)三段,所以你可以自由搭配或設置)




補充一下:
1. 可以配合range actor 來顯示你的AOE 的範圍,只需要創一個range actor (繼承RangeAbil) 然後設定一下觸發技能就OK 了。
2. 對於圓形和弧形UI,設置在技能的搜尋effect 不一定要是你實際使用的effect (也就是說你實際的effect tree 都沒用到他也沒關係),重點是搜尋範圍和弧度要設定好就可以了。
3. 對於弧形和矩型UI,有時候你會希望他不要跟你英雄分開(當你的游標超過技能範圍時),你可以把你的技能的range 欄位設成上限(應用在指向技而非指定技時)。

4. 對於圓形UI的Actor事件,如果你選擇cursor,則你一點擊滑鼠後UI就會消失,建議使用guide (弧形和矩型UI 預設就使用guide),對於需要施法時間的技能比較好看。













评分

参与人数 2威望 +4 印象 +5 收起 理由
麦德三世 + 4 非常不错
四夕水草肃 + 5 不错的研究文

查看全部评分

发表于 2013-8-17 22:54:39 | 显示全部楼层
厉害!

点评

天骄无双 http://du.pfwx.com/  发表于 2013-8-18 11:17
回复

使用道具 举报

发表于 2013-8-25 17:03:39 | 显示全部楼层
好厉害!
回复

使用道具 举报

发表于 2013-8-26 12:44:50 | 显示全部楼层
事实上这个和官方的火焰炮塔有些相似,比起飞弹要简单许多,配合mark能实现很复杂的轨迹。但是这和飞弹还是有明显不同的,最主要就是你无法直接创建出一个移动的特效,而只能是依次创建特效在指定点,形成点拼凑的轨迹,而非真正的飞行轨迹,当然可以用反复设定演算体位置的方法,但是多少有些复杂。当然,如果是不需要飞行轨迹的情况,这个就再合适不过了。
回复

使用道具 举报

发表于 2013-8-26 18:01:03 | 显示全部楼层
致楼上:所谓的“真正的飞行轨迹”除了时间上具有延迟以外,确实也是点拼凑的轨迹,跟本例中的直线系区域没有本质区别。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 16:43 , Processed in 0.523562 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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