文章

使用PlayerPrefs保存簡單的遊戲數據

在 Unity 中,PlayerPrefs 是一個簡單而實用的工具,用於保存和讀取遊戲中的小型數據,如玩家的設置、分數和進度。PlayerPrefs 提供了一個輕鬆的方式來儲存這些數據,即使在遊戲重新啟動或關閉後,也能保持數據。

以下是使用 PlayerPrefs 保存簡單遊戲數據的基本步驟:

1. 了解 PlayerPrefs

PlayerPrefs 提供了三種主要的方法來儲存數據:

  • SetInt(key, value):保存整數型數據。
  • SetFloat(key, value):保存浮點數型數據。
  • SetString(key, value):保存字符串型數據。

相對應的讀取方法是:

  • GetInt(key, defaultValue):讀取整數型數據。
  • GetFloat(key, defaultValue):讀取浮點數型數據。
  • GetString(key, defaultValue):讀取字符串型數據。

2. 保存數據

步驟 1:創建數據保存腳本

  1. 創建新腳本
    • Assets 資料夾中,右鍵選擇 Create > C# Script,創建一個新的 C# 腳本,命名為 DataManager
  2. 編寫保存數據代碼
    • 打開 DataManager 腳本,添加以下代碼來保存數據:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    using UnityEngine;
    
    public class DataManager : MonoBehaviour
    {
        // 保存玩家分數
        public void SaveScore(int score)
        {
            PlayerPrefs.SetInt("PlayerScore", score);
            PlayerPrefs.Save(); // 儲存所有變更
        }
    
        // 保存玩家名字
        public void SavePlayerName(string playerName)
        {
            PlayerPrefs.SetString("PlayerName", playerName);
            PlayerPrefs.Save(); // 儲存所有變更
        }
    
        // 保存玩家等級
        public void SavePlayerLevel(float level)
        {
            PlayerPrefs.SetFloat("PlayerLevel", level);
            PlayerPrefs.Save(); // 儲存所有變更
        }
    }
    

步驟 2:使用數據保存方法

  1. 附加腳本
    • DataManager 腳本附加到場景中的一個物件上(例如一個空的 GameObject)。
  2. 調用保存方法
    • 可以在遊戲中某個事件(如按鈕點擊)觸發時調用保存方法。例如,在 UIButtonHandler 腳本中添加以下代碼:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    using UnityEngine;
    using UnityEngine.UI;
    
    public class UIButtonHandler : MonoBehaviour
    {
        public DataManager dataManager;
        public InputField scoreInput;
        public InputField nameInput;
        public InputField levelInput;
    
        public void OnSaveButtonClick()
        {
            int score = int.Parse(scoreInput.text);
            string playerName = nameInput.text;
            float playerLevel = float.Parse(levelInput.text);
    
            dataManager.SaveScore(score);
            dataManager.SavePlayerName(playerName);
            dataManager.SavePlayerLevel(playerLevel);
    
            Debug.Log("Data Saved");
        }
    }
    

3. 讀取數據

步驟 1:創建數據讀取腳本

  1. 編寫讀取數據代碼
    • DataManager 腳本中添加以下代碼來讀取數據:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    using UnityEngine;
    
    public class DataManager : MonoBehaviour
    {
        // 讀取玩家分數
        public int GetScore()
        {
            return PlayerPrefs.GetInt("PlayerScore", 0); // 0 是默認值
        }
    
        // 讀取玩家名字
        public string GetPlayerName()
        {
            return PlayerPrefs.GetString("PlayerName", "Unknown"); // "Unknown" 是默認值
        }
    
        // 讀取玩家等級
        public float GetPlayerLevel()
        {
            return PlayerPrefs.GetFloat("PlayerLevel", 1.0f); // 1.0f 是默認值
        }
    }
    

步驟 2:使用數據讀取方法

  1. 調用讀取方法
    • 可以在遊戲開始時或某個事件觸發時調用讀取方法。例如,在 Start 方法中加載數據:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    using UnityEngine;
    
    public class GameStart : MonoBehaviour
    {
        public DataManager dataManager;
        public UnityEngine.UI.Text scoreText;
        public UnityEngine.UI.Text nameText;
        public UnityEngine.UI.Text levelText;
    
        void Start()
        {
            int score = dataManager.GetScore();
            string playerName = dataManager.GetPlayerName();
            float playerLevel = dataManager.GetPlayerLevel();
    
            scoreText.text = "Score: " + score;
            nameText.text = "Player Name: " + playerName;
            levelText.text = "Level: " + playerLevel;
    
            Debug.Log("Data Loaded");
        }
    }
    
  2. 附加讀取腳本
    • GameStart 腳本附加到場景中的一個物件上,並配置相應的 UI 元素。

4. 清除數據

如果你需要清除所有的 PlayerPrefs 數據,可以使用以下代碼:

1
PlayerPrefs.DeleteAll();

5. 小結

PlayerPrefs 提供了一個簡單的方法來儲存和讀取小型遊戲數據。它適合用來保存玩家的設置、分數和進度等信息。通過設置數據保存和讀取的腳本,你可以輕鬆地實現遊戲數據的持久化,提升遊戲的用戶體驗。

本文章以 CC BY 4.0 授權