程式篇更新,算是延續上一篇碰撞盒的延伸與應用。
這次新增了"戰鬥"相關的功能,一樣想要一邊參考腳本一邊看文章的
這邊請。
之前分析了 Cursed Castilla,類惡魔城的遊戲。
裡面玩家控制的騎士,是可以朝四個方向投擲武器做攻擊手段的,
這次來試著實作看看。
首先我們需要忍者專用的飛行武器,手裏劍。
好的,那麼就繼續來說明。
先把這個投擲手裏劍做拆解,
手裏劍生成 -> 手裏劍丟出去 -> 傷害判定
這樣的思路去理解會比較清楚。
投擲手裏劍拆解
手裏劍生成這部分
就算是不同類型的遊戲,不限定平台移動遊戲,
也可以放入發射飛行武器的功能,它本來就是一個可選用的組件,
這樣子的設計方式也比較符合 Unity 定義的 Component。
而生成最重要的程式碼是-Instantiate。
我還記得我第一次學到這邊的時候很興奮,
我想這有點接近造物主的喜悅吧( 誇張 )
可以在遊戲世界生成物件,是多麼酷的一件事。
那麼這邊就來細談一下,所謂的動態生成。
【動態生成】
隨便進專案中的一個範例場景,
你會看到已配置好的關卡地板、移動磚、卷軸及可控制的忍者......等。
這些是加載關卡完成時,一併被載入的資源。
但在做遊戲時,我們不能全部都倚靠種在場景已準備好的資源。
這個時候,就需要依照某些時機,動態生成某些物件來使用。
=> 說一下場景資源法的缺點思路,生丟 100 個手裏劍在鏡頭看不到的地方;
一但需要時就更改這個手裏劍的 position,讓它對到忍者再發射出去。
也許這樣聽起來還沒什麼?
=> 那麼繼續,如果這個忍者要出塔防類型,生存模式,
四面八方各會不停地生怪走到中間來,一條路有 100 隻怪,一共 30 波。
怪的血量、移動速度各有差異,如果真的要去生成並維護這大量的物件是很辛苦的。
其實同樣的需求,同樣的功能,可以改成用生怪點控制,
定時定量,生出 100 隻怪,怪經由 AI 控制走到中間,一共 30 波。
怪的類型預先定義好,生出來時刷新資料就好!
動態生成是一個很好的設計思維,可以改善很多資源利用的方式。
話題回到 Unity 的 Instantiate。
這是官方網頁上 API 的介紹,
生出來的物件可以掛在一個父節點上( 做 UI 很好用 ),
可以設定它的位置跟旋轉角度,
而不管是哪一種,都有一個重要的參數 original,這個就是生成時參考的物件。
我們可以把它跟 Unity 的一個定義放在一起應用-Prefab 預製物。
【預製物 prefab】
千軍萬馬的遊戲相信大家應該多少都有玩過,
但其實我們不需要真的去實作到數以萬計的士兵、怪物甚至英雄,
而是定義好幾個兵種、怪物類型、英雄種類( 近戰、遠程或法師。)
搭配怪物鍊成的概念,個體化這些角色的外觀刻劃細節感,
搭配設定檔的設計,讓這些角色的數值能力攻擊方式得以區別。
而這些定義好的,我們可以預先做好管理,方便日後修改調整的就是預製物。
有了這些觀念後,生成物件你也會了,
想運用這些做點什麼就看你想要怎麼做了。
手裏劍丟出去
做法很多種,這邊介紹的不一定是唯一解,但效果你可以看得到,
再依照你自身專案需求,選擇最適合的做法就好。
這邊我是使用 Unity 的物理,剛體來玩這個效果,因為是 2D 遊戲,所以選 Rigibody2D。
根據上述的介紹,我準備了一個 bullet 的 prefab,並掛上了 Rigibody2D。
因為我要呈現的是手裏劍投擲時,本身的重量輕、運用的查克拉跟指法,讓它帶有旋轉;
所以可以無視重力,這邊將重力設成 0,可以依照你要的遊戲方式去調整。
丟出去的部分就很單純了,直接使用 AddForce,
給予一個力道,這個物件就會被推動了。
而生成出來的手裏劍,若不給位置或父節點參考的話,它預設是生在畫面中心點。
所以我還有帶忍者所在的位置資訊進去,就像是從忍者的背後發射出去了。
文字寫得有點輕巧,說是發射,發射的尾倒是懂了。
那頭呢?是要點什麼鍵、要做什麼操作才能觸發這個發射機制。
它定義了一些 Input 的指令字串,這個是怎麼被連結起來的呢?
我們可以在 Unity 的 Player Settings 找到它。
這個 Player Settings 其實還不少東西,但要全部理解才開始做遊戲又太痛苦了,
試著用像這樣的關聯方式,一次一次地讓大家慢慢接觸它,
就不會這麼可怕了。
首先,我們可以看到 Input 中定義了水平跟垂直的移動指令,
而這也是 Unity 開啟一個新專案時就先給你的基本設定,
上下左右、WASD 為什麼都能定義移動,就在這裡。
而忍者的衝刺那個按鈕,是拿 Fire1 來接的,
你可以透過左邊的 Ctrl 跟滑鼠左鍵來使用忍者的衝刺 ( Dash )。
那麼要新增一個投擲手裏劍,發射指令的話,
當然可以拿 Fire2 來用,用左邊的 Alt 或 滑鼠右鍵,
不過我這邊是自己新增一個 Shot,功能鍵是按 Z;
=> 記得,請輸入小寫,這邊的功能鍵一律支援小寫,大寫吃不進去的。
另外補充一下,仔細看下面有重複的定義,其實那是給搖桿使用的。
搖桿配置現在已經有通用的標準接口,基本按鍵都是抓得到的。
有興趣的人,就去點開下面那些針對搖桿部分的設定,
再逐個比對調整吧!
再強調一次,預設開啟的新專案,都已經把這些 Input 都有設好,
所以你的遊戲一開始就是可支援滑鼠+鍵盤+搖桿方式遊玩的。
=> 不過特殊類型的手把,mapping 的部分就不全了,需要額外再接上。
像是 Switch 啦( 燦笑 )
傷害判定
我想,有了能夠發射手裏劍的功能,
一定躍躍欲試吧!光空投怎麼能夠過癮,所以來做一些可破壞物件來打爆。
很簡單的應用,新增一個 Tag 叫做 Shuriken ( 手裏劍 )。
接著我這邊使用的是觸發,所以我把 IsTrigger 打勾,
再把可破壞的物件上,加入了觸發判斷的程式碼,
並給予血量控制就完成了。
哦哦哦,多了一個障礙牆,遊戲好像有趣了點。
明明就看得到卷軸( 出口 ),卻不得其門而入該怎麼辦?
使用這一篇新教的功能-手裏劍吧!按 Z 試試看。
因為牆的 Hp 我都先設 3,所以射個 3 下就會破。
=> 破牆的特效,望向美術( 水汪汪大眼 )。
最後,回到開頭所提的,四方向隨意射擊。
差不多就是這樣的感覺。
手裏劍的飛行速度也可以調整,我有開變數出來,可以亂玩。
而如果真的要繼續致敬 Cursed Castilla,或是惡魔城的話。
就再實作各種飛行道具,忍者嘛......怎麼可能只有手裏劍?!
苦無、飛刀、爆破玉、豪火球......等,
其實也是都可以用同樣方式製作的。
雖然只是一個小功能的實作,
但我還是希望能透過這樣的介紹讓大家明白更多,
所以字打得落落長,
謝謝您的收看。
我們下篇見:)