創作內容

5 GP

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

作者:KK│2020-05-01 19:07:41│巴幣:10│人氣:491
稍微來飆一下進度囉。
更新了不少腳本,如果要一邊看文章一邊研究的請往這邊
這篇中提到的腳本都補上了中文註解,請安心取用。

面對了各種需求的出現,我們該從哪個角度切入這個系列作呢?
不用慌張,一步一步來,先介紹兩個很重要的 component 給大家。
Box Collider :碰撞盒』跟『Rigidbody:剛體』

本文開始:


我們可以從範例場景 Triggers 來認識這些功能,相關腳本 MessageOnCollision.cs
雖然這只是一個作為偵測觸發的範例展示,但其實這有很多的衍伸使用可能。
看完註解後還是有點模糊的部分的話,接著用以下影片作說明。


有角色進入、停留最後離開了觸發區,印出訊息。
原本這個腳本只是提供簡單的,觸發後將區域變為指定色的功能。

Collapse 可以將訊息收疊,下方紅框的 110 是總共發送了 110 次。

=> 不收疊時,可以用來檢查訊息的執行順序,用來除錯跟找出問題源頭很方便,但就是容易被大量資訊洗頻,可依照情況切換使用。

在觸發這塊,設定是相對單純的,只要 Box ColliderIsTrigger 打勾就可以了。
不論觸發與碰撞,這些作用都與 Rigidbody 密不可分。
Rigidbody 是在 Unity 中定義的理想剛體,一個便於物理引擎計算沒有形變的固體。

看完觸發我們來看碰撞,將兩方塊的 IsTrigger 勾勾取消,如上圖AB,並對其中一塊添加 Rigidbody,並調整重力參數為 0 如紅框(不然它就會因為重力而落下XD)。

接著我們來觀察兩方塊的碰撞現象。

有感受到兩方塊的激烈碰撞了嗎?
由於兩個方塊上都有掛碰撞偵測的腳本,所以訊息是兩個都有發出喔。

=> 為什麼不找忍者做這次碰撞實驗呢?因為在這個範例場景中,他忍者身上的剛體有調整過參數,並把剛體類型設置成 IsKinematic 運動學。為了減少實驗中複雜的因素,就只拿方塊演示。

第三個實驗,若是碰撞體跟被碰撞體身上都有剛體呢?
那就可以看到碰撞所發生的物理現象了如下

對這兩個 component 有了基礎的認知後,我們可以做些什麼呢?
+ 出口
+ 補血道具
+ 可以撿到的100塊鈔票
+ 補充空氣的氧氣瓶
+ 子彈/投擲武器
撇除2、3跟4其實都是同樣性質的東西不談,這些東西都是跟玩家 / 怪物觸發或碰撞而作用的。

在腳本中,可以發現不論觸發或碰撞都有 o 對象的相關參數,
Collision2D 又比 Collider2D 多帶了一點物理參數可供使用。
Unity 中有一個很簡單的方式,定義上述東西用來判斷到底碰到了什麼,就是 Tag


可以用這個方式簡單添加你想觸發 / 碰撞的物件類型。

相關的腳本也寫在 PlayerController2D.cs 裡了。

還記得企劃篇開出的出口需求嗎?假設故事的世界觀是這樣的,
『一個忍者中了幻術,被困在了一個奇異世界,需要找到卷軸解開一層又一層的幻術,
最後返回自己的忍者村。』
那麼我用一個 MiniSceneManager.cs 做一個簡單的場景切換功能。


請點開 UnityBuildSetting,在 Scene 那邊添加你想放入的關卡,可自由增減,
接著就可以開始遊玩了(執行 SampleScene )。

欲罷不能:


順便介紹一下怎麼將遊戲打包成執行檔供朋友 / 玩家試玩。
在上圖中點下 Build,指定一個資料夾給它就可以了,輸出就會含有執行檔。
要特別說明的是,紅框處的部分記得修改,現在人大部分的作業系統都是安裝 64 位元的,
雖有相容性在,但還是建議選 x86_64 這個選項。
另一個就是黃框的 PlayerSettings


紅框處是建議勾選的,讓點開這個執行檔的玩家可以做一次解析度調整( 不然每次點開都全螢幕,有點令人驚慌失措XD) 黃框處是你公司名、產品名與版本資訊,就自由填寫囉。

這樣一來就能使用觸發 / 碰撞簡單設計一款遊戲了。
BuildSettingScene 的安排順序,也是幫助玩家理解你的遊戲的一個方式,
可以將比較簡單的放前面,困難放後面,甚至自製幾個其他關卡也可以。
(這邊可以再交棒給企劃選手)

另外,覺得左右平移跟上下浮動的平台仍不夠,
這邊也新增了一個旋轉平台,並提供可修改的參數,可參照
Rotate Moving Platform.prefab
也順便擴充了另外一種的上下左右位移,是依照時間設定瞬間移動的類型。

=> 假設有一種迷宮, 10 秒後某些板塊就會移動到另一處,再 10 秒又回到原處,嗯?怎麼好像某部電影XD?

最後,來提醒幾個細節,可能在你做觸發 / 碰撞異常、無效、發生 BUG 的原因。

1. Box Collider 的大小設置 (尤其容易發生在,copy 某個現有物品來做新物件。)

2. 因為是 2D 遊戲,不論碰撞盒或剛體,請記得選 2D 版。
( 3D 不與 2D 做事件判斷喔,只要使用一致就好,例如都用 3D 版,腳本那邊也要記得改。)

3. Tag 忘了編輯或選擇

4. 想用觸發,卻沒勾 IsTrigger,想用碰撞結果大家都沒有剛體。

5. 小心使用 Stay 系列,如最上面那張範例圖,那是短短 2 秒就噴了 110 次訊息喔,而且還會一直噴下去。

後話:


這樣這篇結束後,交流作的內容稍微就豐富了一點。
再次回頭看 Unity 給這些腳本的定義,Component 組件,
如果這些東西對你在做的練習、引擎熟練、專案製作有幫助的話,
歡迎自行拿去「組合」、「修改」與「使用」,完善你的系統。

這篇中很多展示的部分都只是用文字??
是的,雖然只是把訊息印出來,但實際是有資料承接的,
有資料承接代表實際功能是可以運作的,至於跟我們想象的遊戲不一樣,
那是因為少了表現出來的 UI 與一些特效。

就像哈哈姆特提供的勇者 PK 一樣,
甜在心饅頭 發動了【 攻擊】,對 XXX 造成 9 點傷害。
XXX 體力歸零,您獲得了勝利。
其實就文字呈現上,這套戰鬥系統就算做完了,
我也是寫程式寫很久才意識到資料面的處理跟表演面的拆開這件事。

那麼,在很多東西都就緒的情況下,
就可以期待企劃跟美術能夠將這個專案再優化到下一個階段了。
我的專案心得是,只要有一方將進度往前衝起來,就會連帶的把整個開發加速起來。
不論是企劃文件全部都開好、美術資源已經準備好、動畫製作完畢,
加上像這篇的把需求補完,又新增需要的元件可以擴充......等,
要將專案進行的順利,不要一直拿時間不夠做藉口,
可能就先請自己做起。

寫給曾參與過的幾個案子的我做的檢討:)

那麼,我們下篇見,謝謝收看。



引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4767735
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unity|Platformer

留言共 1 篇留言

樂小呈
想到之前常常卡在OnTriggerEnter 3D、2D用錯,然後一直找不出問題XDD

05-01 19:14

KK
我也是......每次赫然發現就會覺得自己很愚蠢(掩面XD05-01 19:16
我要留言提醒:您尚未登入,請先登入再留言

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

前一篇:Unity 交流作 - ... 後一篇:畫長頸鹿(一)...

追蹤私訊切換新版閱覽

作品資料夾

robert286 ლ(´•д• ̀ლ
ლ(´•д• ̀ლ看更多我要大聲說11小時前


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

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