iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
自我挑戰組

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

【Day 28】經典 Flappy Birds 遊戲實作(六)GameOver UI 和存檔系統

  • 分享至 

  • xImage
  •  

今天,我們要來製作 Game Over 的 UI,還有最高紀錄的部分

製作 Game Over 介面

  • 重新創立一個 Panel ,取名為 settlement ,並且在裡面加入記分板的圖片,半透明黑色背景和 Game Over 字樣
  • 建立兩顆按鈕 RestartQuit ,並且調整 translationSprite Swap
  • 在同樣的地方找到 Navigation 並設置為 None
  • 調整這些元素的位置和大小
  • 這裡同樣要建立兩個 TextMeshPro ,用於顯示當前分數與最高分數
  • 同樣的設置一些上下滑入的動畫,讓這個介面不是突然間跳出來的

儲存最高分

想要在 Unity 裡面儲存最高分數,會需要用到 Unity 的存檔系統,我們需要在 GameManager.cs 中加入這些程式碼

// GameManager.cs
    // ... //
    public void SetGameOver()
    {
		// ... //
        int bestScore = PlayerPrefs.GetInt("BestScore", 0);
        if(score > bestScore)
        {
            bestScore = score;
            PlayerPrefs.SetInt("BestScore", bestScore);
        }
    }

我們從 PlayerPrefs 中的 GetInt 方法,來讀取 KEY 為 BestScore 的數值並回傳,如果沒找到 BestScore ,則新建立一個 KEY 為 BestScore 的資料並且預設值為 0 ,然後回傳。
接著我們用 if 來比較,最後用 SetInt() 方法來寫入最高分數。
這裡 Unity 同樣還提供 GetStirngSetFloat 等等不同的資料型態來存放數值

記分板的文字顯示

接下來是將這些分數顯示在畫面中,我們要先宣告一個 Panel 的物件,和兩個文字的物件。

// GameManager.cs
    [SerializeField] private GameObject settlement;

    [SerializeField] private TMP_Text gameOverScoreText;

    [SerializeField] private TMP_Text gameOverBestScoreText;
    // ... //
    public void SetGameOver()
    {
		// ... //
		settlement.SetActive(true);
        int bestScore = PlayerPrefs.GetInt("BestScore", 0);
        if(score > bestScore)
        {
            bestScore = score;
            PlayerPrefs.SetInt("BestScore", bestScore);
        }
        gameOverScoreText.text = score.ToString();
        gameOverBestScoreText.text = bestScore.ToString();
    }

SetGameOver() 被呼叫之後,使用 settlement.SetActive(true) 來讓結算介面顯示,相反的 SetActive(false) 就是關閉結算介面,記得要把settlementPanel 拉到這個變數中。其餘的部分就使用一樣的方法把分數轉成文字顯示在畫面中。

按鈕程式碼

我們還要再寫兩個函式給兩顆按鈕( ReStartQuit )使用,所以我們在 GameManager.cs 中加入

// GameManager.cs
	//..//
    public void retry()
    {
        SceneManager.LoadScene("GamePlay");
    }
    public void quit()
    {
	    Application.Quit();
    }
    

分別在按鈕裡面 On Click 的部分呼叫這兩個函式
https://ithelp.ithome.com.tw/upload/images/20241012/20169301MT5QFWWRPj.png
這樣跳出最終的結算介面時,按下 Restart 按鈕就可以重新開始, 按下 Quit 就可以退出遊戲囉。


今天我們製作了 Game Over 的 Panel,並且幫這個頁面加上了一些進場動畫,使畫面更加活潑。還製作了存放最高分數的簡易存檔系統,和按鈕的功能。這個遊戲基本上可以說是完成了!但我希望可以讓這個遊戲變得更完整一點,所以,明天我們將來加入 Welcome 介面和遊戲時播放的音樂!


上一篇
【Day 27】經典 Flappy Birds 遊戲實作(五)getReady 跟分數的 UI 動畫和遊戲音效
下一篇
【Day 29】經典 Flappy Birds 遊戲實作(七)終。Welcome Page、背景音樂,遊戲下載連結
系列文
Unity入門遊戲開發與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言