今天,我們要來製作 Game Over 的 UI,還有最高紀錄的部分
settlement
,並且在裡面加入記分板的圖片,半透明黑色背景和 Game Over 字樣Restart
和 Quit
,並且調整 translation 為 Sprite Swap
想要在 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 同樣還提供 GetStirng
,SetFloat
等等不同的資料型態來存放數值
接下來是將這些分數顯示在畫面中,我們要先宣告一個 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)
就是關閉結算介面,記得要把settlement 的 Panel 拉到這個變數中。其餘的部分就使用一樣的方法把分數轉成文字顯示在畫面中。
我們還要再寫兩個函式給兩顆按鈕( ReStart
和 Quit
)使用,所以我們在 GameManager.cs
中加入
// GameManager.cs
//..//
public void retry()
{
SceneManager.LoadScene("GamePlay");
}
public void quit()
{
Application.Quit();
}
分別在按鈕裡面 On Click 的部分呼叫這兩個函式
這樣跳出最終的結算介面時,按下 Restart
按鈕就可以重新開始, 按下 Quit
就可以退出遊戲囉。
今天我們製作了 Game Over 的 Panel,並且幫這個頁面加上了一些進場動畫,使畫面更加活潑。還製作了存放最高分數的簡易存檔系統,和按鈕的功能。這個遊戲基本上可以說是完成了!但我希望可以讓這個遊戲變得更完整一點,所以,明天我們將來加入 Welcome 介面和遊戲時播放的音樂!