iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
自我挑戰組

Unity入門遊戲開發與實作系列 第 21

【Day 21】製作一個簡單 Unity 小遊戲(十)建立不同難度的關卡

  • 分享至 

  • xImage
  •  

昨天,我們製作了通關的 UI 畫面,並且幫這個畫面加上了一點小小的漸變動畫,寫了一些程式來檢測玩家是否通關。
今天我們要來製作更多的場景,並且讓玩家在通過關卡之後可以自動進入下一關!

建立關卡

想要製作更多的關卡,最簡單的方式就是複製當前的 Scene ,並且再做一些小修改,而這也是我們接下來要做的。但在我們這麼做之前,我們要先幫場景中的一些物件都建立一個 Prefab ,原因是因為如果不使用 Prefab ,各個場景中的物件就都不相關,這時候如果想調整相機位置、玩家前進的速度、左右移動的靈敏度等等,就會非常麻煩,因為我們需要逐個場景的調整,建立一個 Prefab 使我們只需要在 Prefab 上更改,它會自動套用到由這個 Prefab 建立的所有物件。

建立 Prefab

建立 Prefab 一樣很簡單,就像之前建立 Obstacle 的 Prefab 一樣,我們把場景中所有可以調整參數的物件都選取起來(例如:GameManagerMain CameraPlayerCanvasEnd)並拖曳到 Prefab 資料夾內
https://ithelp.ithome.com.tw/upload/images/20241005/20169301REiit9845j.png
https://ithelp.ithome.com.tw/upload/images/20241005/20169301d9atO1lXqL.png

這樣就成功建立了所有物件的 Prefab

切換關卡

在每次通關之後,除了顯示通關畫面之外,還要準備切換到下一關,我們希望他能在顯示通關畫面兩秒之後自動切換到下一關,想要實現這樣的效果我們可以從 Animation 下手。

在動畫中加入 Event

選取之前設置在 Canva 底下的 Level Complete 的 Panel 後,再回到 Animation 面板,就可以看到我們之前加入的動畫了。把時間軸拉到第三秒的位置(每秒 60 張的話就是第 180 格),並且按下 Add Event 的按鈕
https://ithelp.ithome.com.tw/upload/images/20241005/20169301CFTixxId43.png
點選創建出來的小標誌之後,在右邊可以看最上面有一個 Function 的欄位,表示我們可以在這個 Event 中選擇要執行的函式,所以我們接下來要來寫載入新場景的程式碼!

撰寫程式

對這個 Level Complete 建立一個小小的程式,命名為 LevelComplete.cs ,內容很簡單,就是提供一個 Method 來讓我們能夠從剛剛的 Function 欄位中來選擇。

// LevelComplete.cs
using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelComplete : MonoBehaviour
{
    public void LoadNextLevel()
    {   SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
    }
}

解釋一下這裡的程式碼,就像【Day 19】使用到的重啟場景的功能,我們如果要切換場景,也一樣要使用到 SceneManager,同樣要記得在最上方寫上 using UnityEngine.SceneManageent; 。相比之前不同的是,我們原本在 SceneManager.LoadScene() 中的括號裡面填入我們要 Load 的場景名稱,這次我們 Load 場景的 buildIndex

  • 什麼是 BuildIndex
    點選 Unity 最左上角的 File -> Build Settings ,在圈起來的地方代表的就是這些場景的 BuildIndex
    https://ithelp.ithome.com.tw/upload/images/20241005/20169301K0XZFdYe01.png

    level_01buildIndex 是 0 ,level_02buildIndex 是 1 ,以此類推。為了示範方便這裡現在有三個 Scene ,等等我們會來建立這三個 Scene

所以我們使用 SceneManager.GetActiveScene().buildIndex 來獲取當前 Scene 的 buildIndex 值,然後 + 1,表示我們要載入下一個場景。

建立更多關卡

接著我們來建立更多的關卡,在 Scenes 資料夾點選當前的場景並且按下 Ctrl + D 來複製一個一模一樣的場景,取名為 Level_02。也可以複製多次來建造更多的關卡。
點兩下 level_02 的 Scene 來開啟,畫面當然沒有任何不同,因為這是我們複製 level_01 的,但我們可以在視窗左上角看到我們已經開啟了 level_02 的場景
https://ithelp.ithome.com.tw/upload/images/20241005/20169301iD8WZmUh26.png
在這裡,我總共複製了三個關卡,接著我們就可以分別對這些場景中的障礙物進行微調。我讓關卡中的障礙物越來越多,使玩家在越高 level 的關卡越難通過,記得每次切換場景之前都要存檔。

現在進行遊戲就可以發現我們能夠正常跳關了!但是當我們結束第三關的關卡的時候,程式就會跳出錯誤,因為他想要切換到下一個場景,但我們並沒有更多的場景讓 Unity 來切換。不過沒關係,明天我們將來處理這個問題,明天我們要來加入 Welcome Page 和 Credits Page ,作為這次小實作最後的收尾!


上一篇
【Day 20】製作一個簡單 Unity 小遊戲(九)通關偵測和通關 UI 動畫
下一篇
【Day 22】製作一個簡單 Unity 小遊戲(十一)終。Welcome, Credits Page 和遊戲下載連結
系列文
Unity入門遊戲開發與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言