Unity PlayerPrefs 教學

使用 Unity 製作遊戲可透過不同的方式儲存資料,而使用 PlayerPrefs 儲存資料是一種相當簡單的方法。缺少儲存遊戲進度的功能,每次玩遊戲都需要重頭開始,玩家可能很快就不玩了!

製作幾個遊戲場景,包括提供玩家選擇關卡的遊戲選單,以及不同風格的場景(教學範例為上午、下午、晚上場景)。我們將在第一個場景儲存資料,然後在進入第二個場景時讀取資料。

 

注意!全部的場景必須加入 Scenes In Build 清單,否則不會包含在發佈的遊戲中,載入場景時將會出現錯誤。

 

存取整數 ( SetInt / GetInt )

先開啟 Scene01 場景,建立一個 C# 腳本,使用 PlayerPrefs.SetInt 儲存 playerScore(玩家分數)。

 

開啟 Scene02 場景,建立第二個 C# 腳本,使用 PlayerPrefs.GetInt 取得儲存的資料並將玩家分數顯示在 Console 視窗。

 

存取浮點數 ( SetFloat / GetFloat )

如果需要儲存的數值包括小數,需改用 SetFloat 儲存,左下圖以儲存玩家 HP 為例。

使用 GetFloat 讀取資料,右下圖範例以 Debug.Log 將讀取的數值顯示於 Console 視窗。

 

存取字串 ( SetString / GetString )

如果需要儲存與載入字串,則分別使用 SetString、GetString 。

 

使用 PlayerPrefs 記錄的資料儲存在那裡呢?如果使用 Windows 系統可執行 regedit 開啟登錄編輯器檢視。

儲存的資料是經過編碼的,玩家無法直接進行修改,不過還是有可能作弊的,這個部份有機會再討論吧!

 

存取玩家屬性

瞭解 PlayerPrefs 的概念後,讓我們實際運用在遊戲機制的製作。

建立一個 C# 腳本並命名為「PlayerStatus」附加到玩家角色,這個腳本的功能是儲存玩家的屬性,宣告 2 個變數儲存玩家名稱與玩家分數,稍後還可以加上更多的屬性。

 

遊戲的設計是玩家抵達關卡的終點即可前往下一個關卡,必須在後面的關卡顯示玩家名稱與分數。為了製作此功能,在場景的終點處放置一個物件,當玩家碰撞此物件時即可過關。建立一個 C# 腳本並命名為「LevelClear」,附加在此物件。

 

如果數值需要顯示於遊戲畫面,可以使用 GetComponent 方式進行更新。

修改先前的 PlayerStatus.cs 腳本,在 Start ( ) 增加讀取 PlayerPrefs 的玩家名稱與分數,並在 Update ( ) 增加遊戲畫面上分數更新顯示的功能。

 

 

PlayerPrefs.unitypackage (20220802)