自學Unity製作推彈珠3D遊戲


疫情期間都在家,時間多了於是決定找點東西學學,學完基本的 Vue,js 之後 , 想試試寫個遊戲 , 網上搜索了一下不同的遊戲引擎,最後決定學習Unity。主要是因為跨平台而且網上教學也比較多。看了大部份的教學都說Unity 2018 這個版本會比較好和穩定,而且這個版本教學會比較多。我就去了 https://store.unity.com/download-nuo 創建帳號和下載 。 我選擇了免費的個人版本。

下載好之後,我首先跟着Unity 提供的Unity入門網上課程(Getting Start with Unity)來做,下載了他們提供的檔案,學習Unity的基本用法和慨念。例如鏡頭的慨念,移動旋轉物件或是Mod的使用等等。

Unity入門網上課程:https://learn.unity.com/course/getting-started-with-unity

Unity 提供的網上課程(Getting Start with Unity)

學完之後,我還是毫無頭緒如何能做到一個會自動不停前後移動的板子,來做到推錢機的雛形。於是我又再網上搜尋,找到下面這個YouTube視頻,我跟着他一步一步來做,推錢機的雛形就出來了。

Unity : How to make Simple Coin Pusher by FAGStudioTec on YouTube

之後就在網上不停搜尋不同的教學。例如C#,物件撞擊,物料和燈光使用的方法 等等。我自己再加了一些板子、釘子。 自己試試調整不同的物料。第一版的推錢機就像下面這樣。

第一版的推錢機

之後又試試不同的燈光

之後換了一些物料和燈光,加上了一個抽獎的走馬燈
走馬燈的圖和有彈珠的物料是在Photoshop上弄的,Unity能直接讀取PSD,很方便

後來我覺得自己弄的推錢機太丑了,去了Unity Store 找了一下有沒有能用的物料。於是下載了這兩個來用。(其實下載了好幾款,試來試去最後選了這兩個)

Stone Fence by Mixaill https://assetstore.unity.com/packages/3d/environments/stone-fence-65093

Sets – Gems by Playmint
https://assetstore.unity.com/packages/3d/props/sets-gems-19902

利用在Unity Store 下載的3D Props 製作和修改後的推錢機,也加上了顯示還有多少次抽獎機會的顯示燈

做到這裏,已經邊學邊做了差不多7天了。我還是覺得在中間那兩個洞能便成圓形就更好了。但是在Unity Store 找不到這樣的模型,於是又在網上搜索教學,看看能如何自己創建自己想要的模型。於是找到了ProBuilder,又用了兩天時間。

ProBuilder

ProBuilder: https://unity-technologies.github.io/procore-legacy-docs/probuilder/probuilder2-gh-pages/upgrading/overview/

中間兩塊板子利用ProBuilder開了兩個圓形的洞了
(另外加了背景圖片)

做到這裡。我開給嘗試Build and Run 來試玩,但每次分數和彈珠位置都是重置的,於是又去找教學。看看如何做到遊戲儲存讀取的功能。這個花了我最多時間,差不多找了五、六天,發現序列化Serialization的方法太難了,看了很多天還是搞不懂,一直失敗,於是便使用了PlayerPrefs來儲存所有物件的position 和rotation的xyz。由於這遊戲沒有太多關卡和物件,所以用PlayerPrefs儲存讀取還可以運行。希望之後我能搞懂序列化的方法。

推錢機遊戲怎少得牆壁的功能呢,之後我加了個大的彈珠,推倒後就獲得15秒的牆壁。也在走馬燈加上了牆壁彈珠的獎項。(牆壁彈珠的物料是用了自己家的地板,拍照再用PS調色?)

加上牆壁彈珠的遊戲
實際遊玩中的效果,在這一版中,如果抽獎時抽到鑽石是直接獲得鑽石的,集滿6顆就可以獲得Jackpot

在這裡又想說一下Jackpot彈珠的問題,我是想做到看到畫面上藍色的Jackpot彈珠不停增加愈多愈多的感覺,但是後來發現如果畫面中彈珠太多,會影響遊戲的效能和機器會發熱。於是我把藍色彈珠只會放20粒在畫面上。剩餘的藍色彈珠數量則存在數據中,待中獎會發放。所以看到上面畫面最頂部有待發放110粒。

不過,這樣做就沒有Jackpot愈積愈多的感覺。於是我又修改了一下代碼。當Jackpot發出超過20粒後,Jackpot每增加10時,就再發出一粒藍色彈珠,這樣當Jackpot數目增加時,畫面也會有些變化。

if(jackpot>30){
    myScore.setMaxJackpot=((jackpot-20)/10)+20;
}
後來又修改了一下玩法,再加上吞噬雙倍黑洞

首先是修改了鑽石獲得的方法,抽獎的時候,如果抽倒鑽石,會從畫面中跌下一顆鑽石到平台上,玩家要把鑽石推下才能獲得鑽石。而不是抽中鑽石便立即獲得。因此在這裡又加上了儲存讀取鑽石位置的代碼。

後來我又加上了一個會移動的「小黑洞」在投放彈珠口前面。當這個小黑洞是紅色的時候,如果彈珠投進去了,彈珠會被小黑洞吞噬面消失;而小黑洞是綠色的時候,彈珠經過會被複製變成兩顆彈珠。

Marble Pusher 推彈珠3D遊戲 :https://remyhouse.com/MarblePusher/v0.6/index.html
只限PC,手機勉強能玩,但一開始會提示不支援,按OK後可繼續。

Unity-Marble-Pusher-3D-Game
Marble Pusher 推彈珠3D遊戲 :https://remyhouse.com/MarblePusher/v0.6/index.html
只限PC,手機勉強能玩,但一開始會提示不支援,按OK後可繼續

有時間我會再繼續學繼續弄下去,本來想試試做成iOS App,但我的Mac版本太舊,運行不了新版的XCode?

遊戲當中少不了音樂和音效。我在freesound.org 找了一些音效和音樂素材,加進遊戲裡,使用到的素材如下:

Sound Effect & Music:
Game win.mp3 https://freesound.org/people/elijahdanie/sounds/487436/
Powerup/success.wav https://freesound.org/people/GabrielAraujo/sounds/242501/
Wrong Choice https://freesound.org/people/unadamlar/sounds/476177/
MarbleDrop » md02.aif https://freesound.org/people/lsprice/sounds/89805/
Skibka – Voyage 3A (loop).wav https://freesound.org/people/SkibkaMusic/sounds/477590/
Good! https://freesound.org/people/syseQ/sounds/267528/
Badge Coin Win https://freesound.org/people/steaq/sounds/387232/
Hidden Wall Opening https://freesound.org/people/ertfelda/sounds/243699/
Level-Up Sound FX https://freesound.org/people/elmasmalo1/sounds/350841/
Platform Game Theme Loop 3.wav https://freesound.org/people/Mrthenoronha/sounds/476547/
Music » Victory Music Cue.wav https://freesound.org/people/joshuaempyre/sounds/404025/

音樂和音效這部分,邊找邊試應該花了一兩天,當中包含尋找教學去使到如何令某些音樂/音效不重疊播放,每次只播放一種音效。

另外我也在YouTube看了很多Brackeys的教學影片,很多很有用的教學。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料