創作內容

3 GP

Unity 交流作 - 2D平台遊戲(三)程式篇II

作者:KK│2020-07-05 18:58:23│巴幣:6│人氣:501

程式篇更新,算是延續上一篇碰撞盒的延伸與應用。
這次新增了"戰鬥"相關的功能,一樣想要一邊參考腳本一邊看文章的這邊請。

之前分析了 Cursed Castilla,類惡魔城的遊戲。
裡面玩家控制的騎士,是可以朝四個方向投擲武器做攻擊手段的,
這次來試著實作看看。

首先我們需要忍者專用的飛行武器,手裏劍。
好的,那麼就繼續來說明。
先把這個投擲手裏劍做拆解,
手裏劍生成 -> 手裏劍丟出去 ->  傷害判定
這樣的思路去理解會比較清楚。

投擲手裏劍拆解


手裏劍生成這部分
我寫了一個 Shooter.cs 腳本,特別獨立出來是因為,
就算是不同類型的遊戲,不限定平台移動遊戲,
也可以放入發射飛行武器的功能,它本來就是一個可選用的組件,
這樣子的設計方式也比較符合 Unity 定義的 Component

而生成最重要的程式碼是-Instantiate
我還記得我第一次學到這邊的時候很興奮,
我想這有點接近造物主的喜悅吧( 誇張 )
可以在遊戲世界生成物件,是多麼酷的一件事。

那麼這邊就來細談一下,所謂的動態生成。

  【動態生成】
  隨便進專案中的一個範例場景,
  你會看到已配置好的關卡地板、移動磚、卷軸及可控制的忍者......等。
  這些是加載關卡完成時,一併被載入的資源。
  但在做遊戲時,我們不能全部都倚靠種在場景已準備好的資源。
  這個時候,就需要依照某些時機,動態生成某些物件來使用。

  => 說一下場景資源法的缺點思路,生丟 100 個手裏劍在鏡頭看不到的地方;
  一但需要時就更改這個手裏劍的 position,讓它對到忍者再發射出去。
  也許這樣聽起來還沒什麼?

  => 那麼繼續,如果這個忍者要出塔防類型,生存模式,
  四面八方各會不停地生怪走到中間來,一條路有 100 隻怪,一共 30 波。
  怪的血量、移動速度各有差異,如果真的要去生成並維護這大量的物件是很辛苦的。

  其實同樣的需求,同樣的功能,可以改成用生怪點控制,
  定時定量,生出 100 隻怪,怪經由 AI 控制走到中間,一共 30 波。
  怪的類型預先定義好,生出來時刷新資料就好!

動態生成是一個很好的設計思維,可以改善很多資源利用的方式。

話題回到 Unity Instantiate

這是官方網頁上 API 的介紹,
生出來的物件可以掛在一個父節點上( 做 UI 很好用 ),
可以設定它的位置跟旋轉角度,
而不管是哪一種,都有一個重要的參數 original,這個就是生成時參考的物件。
我們可以把它跟 Unity 的一個定義放在一起應用-Prefab 預製物。

  【預製物 prefab
  千軍萬馬的遊戲相信大家應該多少都有玩過,
  但其實我們不需要真的去實作到數以萬計的士兵、怪物甚至英雄,
  而是定義好幾個兵種、怪物類型、英雄種類( 近戰、遠程或法師。)
  搭配怪物鍊成的概念,個體化這些角色的外觀刻劃細節感,
  搭配設定檔的設計,讓這些角色的數值能力攻擊方式得以區別。
  而這些定義好的,我們可以預先做好管理,方便日後修改調整的就是預製物。

有了這些觀念後,生成物件你也會了,
想運用這些做點什麼就看你想要怎麼做了。

手裏劍丟出去


做法很多種,這邊介紹的不一定是唯一解,但效果你可以看得到,
再依照你自身專案需求,選擇最適合的做法就好。
這邊我是使用 Unity 的物理,剛體來玩這個效果,因為是 2D 遊戲,所以選 Rigibody2D

根據上述的介紹,我準備了一個 bulletprefab,並掛上了 Rigibody2D


因為我要呈現的是手裏劍投擲時,本身的重量輕、運用的查克拉跟指法,讓它帶有旋轉;
所以可以無視重力,這邊將重力設成 0,可以依照你要的遊戲方式去調整。

丟出去的部分就很單純了,直接使用 AddForce
給予一個力道,這個物件就會被推動了。
而生成出來的手裏劍,若不給位置或父節點參考的話,它預設是生在畫面中心點。
所以我還有帶忍者所在的位置資訊進去,就像是從忍者的背後發射出去了。

文字寫得有點輕巧,說是發射,發射的尾倒是懂了。
那頭呢?是要點什麼鍵、要做什麼操作才能觸發這個發射機制。
好的,我們可以先看看專案中,Global.cs 這個腳本,
它定義了一些 Input 的指令字串,這個是怎麼被連結起來的呢?


我們可以在 UnityPlayer Settings 找到它。

這個 Player Settings 其實還不少東西,但要全部理解才開始做遊戲又太痛苦了,
試著用像這樣的關聯方式,一次一次地讓大家慢慢接觸它,
就不會這麼可怕了。

首先,我們可以看到 Input 中定義了水平跟垂直的移動指令,
而這也是 Unity 開啟一個新專案時就先給你的基本設定,
上下左右、WASD 為什麼都能定義移動,就在這裡。


而忍者的衝刺那個按鈕,是拿 Fire1 來接的,
你可以透過左邊的 Ctrl 跟滑鼠左鍵來使用忍者的衝刺 ( Dash )。

那麼要新增一個投擲手裏劍,發射指令的話,
當然可以拿 Fire2 來用,用左邊的 Alt 或 滑鼠右鍵,
不過我這邊是自己新增一個 Shot,功能鍵是按 Z
可以參考 PlayerController2D.cs 這個腳本。

=> 記得,請輸入小寫,這邊的功能鍵一律支援小寫,大寫吃不進去的。

另外補充一下,仔細看下面有重複的定義,其實那是給搖桿使用的。
搖桿配置現在已經有通用的標準接口,基本按鍵都是抓得到的。


有興趣的人,就去點開下面那些針對搖桿部分的設定,
再逐個比對調整吧!
再強調一次,預設開啟的新專案,都已經把這些 Input 都有設好,
所以你的遊戲一開始就是可支援滑鼠+鍵盤+搖桿方式遊玩的。

=> 不過特殊類型的手把,mapping 的部分就不全了,需要額外再接上。
像是 Switch 啦( 燦笑 )

傷害判定


我想,有了能夠發射手裏劍的功能,
一定躍躍欲試吧!光空投怎麼能夠過癮,所以來做一些可破壞物件來打爆。
接著我新增了一個牆壁類型的 prefab,上面綁了這個腳本 DestructibleUnit.cs

還記得上一篇程式篇提到的碰撞、觸發嗎?
很簡單的應用,新增一個 Tag 叫做 Shuriken ( 手裏劍 )。
接著我這邊使用的是觸發,所以我把 IsTrigger 打勾,
再把可破壞的物件上,加入了觸發判斷的程式碼,
並給予血量控制就完成了。


哦哦哦,多了一個障礙牆,遊戲好像有趣了點。
明明就看得到卷軸( 出口 ),卻不得其門而入該怎麼辦?


使用這一篇新教的功能-手裏劍吧!按 Z 試試看。
因為牆的 Hp 我都先設 3,所以射個 3 下就會破。

=> 破牆的特效,望向美術( 水汪汪大眼 )。

最後,回到開頭所提的,四方向隨意射擊。


差不多就是這樣的感覺。

手裏劍的飛行速度也可以調整,我有開變數出來,可以亂玩。
而如果真的要繼續致敬 Cursed Castilla,或是惡魔城的話。
就再實作各種飛行道具,忍者嘛......怎麼可能只有手裏劍?!
苦無、飛刀、爆破玉、豪火球......等,
其實也是都可以用同樣方式製作的。

雖然只是一個小功能的實作,
但我還是希望能透過這樣的介紹讓大家明白更多,
所以字打得落落長,
謝謝您的收看。
我們下篇見:)
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4839358
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unity|2D platformer

留言共 2 篇留言

樂小呈
想到之前我做地牢那款
物體穿牆花超多時間修[e3]

07-05 19:13

KK
QQ"...放心,那些都會化成美好的經驗值[e3]07-05 19:15
矮鵝
這遊戲超棒的耶~~洛克人X、朧村正粉~~我喜歡可以空中二段跳的

07-05 19:29

KK
那你的技術應該滿好的,我很多朋友動作平台類型苦手XD07-05 21:04
我要留言提醒:您尚未登入,請先登入再留言

3喜歡★nigel0813 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:魔界偵探小魅-遊戲開發紀... 後一篇:像素亂點...

追蹤私訊切換新版閱覽

作品資料夾

a4516【巴哈姆特事紀】
骯,《外傳.命之章》第27集〈法、理、情〉。呀,各位今天都好嗎?為國家和平努力不懈的中流砥柱們。看更多我要大聲說昨天16:34


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】