|
本帖最后由 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個方相射出去的直線:
外層的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 為中心),然後靠外層來決定這些圖案要印在哪裡,感覺就像是在畫點陣圖一樣...
(四個開口朝外的U 字型,外層四個點,內層7個點,共執行4*7=28次搜尋effect)
當然,熟悉之後也可以使用三層持續性effect,端看需求。
2. 使用"遞迴"持續性effect:
恩...名子可能取的不太清楚,總之就是持續性effect 反複呼叫自己,而達到"位移(offset)"可以累積的效果。
你可以把自己(當前的持續性effect)掛在Effect - Expire/Final上(就是自己呼叫自己的意思啦),不過要注意的是,這樣通常會造成無窮迴圈,
你一定要透過驗證器來設定終止條件,驗證的方法很多(目標距離施法者多遠之類的),而且你一定要保正他有完成的一天,如果是想以遞迴的"次數"來限制的話,可以參考這篇,使用marker來達成。
還有一點要注意,使用這個方法,每次呼叫自己時,一定要有一點點delay time,不然會有bug跳出來。
以下是直線AOE 的改良版,現在你不需要指定每一個點,還可以自由的定義長度,只需要一個持續性effect 和一個驗證器就可以達到 (搜尋跟傷害那些不算):
<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>
只要稍微調整一下上面例子,還可以創造出螺旋型的效果(因為圖片看不到完整軌跡,為了效果顯注,我連續施放了好幾次):
<ExpireOffset value="-1,-0.01,0"/>
又或者你希望他繞著你轉(會跟著你移動):
<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 了。
(目前有兩個模型,一紫一紅,搞不懂為何不做個白色的讓我們可以自由染色就好...)
3. 長條型:
這個好像不用設置搜尋effect,直接創一個新的Quad actor (要繼承ZergGuideVisualQuadDown 或 ZergGuideVisualQuadRed),最後設定一下觸發技能、長和寬就OK 了。
另外他還有一個叫Quad 的欄位,是一個比例值,全設+/-0.5 的話,你就會在矩型的中間,你可以參考預設值,x 是 [-0.5,0.5],y是[-1,0],所以矩形會在你正前方(朝游標方向)。
(模型一樣一紫一紅,可是他有分成前(連接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),對於需要施法時間的技能比較好看。
|
评分
-
查看全部评分
|