接續上一篇的關於保留美好回憶這件小事(1),那麼在有了圖像之後,該如何留存影像呢?今天就讓我娓娓道來 :
儲存與讀取 (Save and Load)
儲存,即是將資料儲存在可永久紀錄的空間,可能是本機的硬碟檔案、雲端伺服器空間等或者是其他儲存設備;讀取,便是將該資料從儲存設備中取出。
若要本機端硬碟儲存資料大致上有以下幾種方式:
PlayerPrefs (in String)
1. 需考慮在各個平台實作的容量限制
2. Windows 平台,若是 standard format 僅有 1MB 容量
3. 若序列化檔案格式非字串,則須考慮使用 Base64 轉換成字串後儲存
void PlayerPrefsExample(byte[] serializedData)
{
var s = System.Convert.ToBase64String(serializedData);
PlayerPrefsExample(s);
}
void PlayerPrefsExample(string serializedData)
{
const string key = "gamesave";
// Save
UnityEngine.PlayerPrefs.SetString(key, serializedData);
// Load
serializedData = UnityEngine.PlayerPrefs.GetString(key);
}
寫入檔案
遊戲存檔最適合方案
一律寫入到 Unity 所提供長期儲存的資料夾路徑 Application.persistentDataPath
要注意上述路徑在 Android & iOS 會根據 Bundle Identifier 來產生(改變 Bundle Identifier 將無法讀取到之前得檔案)
using UnityEngine;
using System.IO;
using System.Text;
void FileExample(string serizliedData)
{
var raws = Encoding.UTF8.GetBytes(serizliedData);
FileExample(raws);
}
void FileExample(byte[] serizliedData)
{
const string fileName = "gamesave.dat";
var filePath = Application.persistentDataPath + "/" + fileName;
// Save
try
{
File.WriteAllBytes(filePath, serizliedData);
}
catch (System.Exception e)
{
// TODO: Handle exception
}
// Load
try
{
serizliedData = File.ReadAllBytes(filePath);
}
catch (System.Exception e)
{
// TODO: Handle exception
}
}
如果是雲端伺服器空間,那就得看雲端伺服器的 API 文件來進行操作,例如 Firebase 可參考其文件:Firebase: Saving Data,串接 Steam 可參考其文件:Steamworks: Steam Cloud。
完整存檔讀取範例,採用 JSON 格式寫入至硬碟檔案
public static void Save(object gameState, string fileName = "gamesave.dat")
{
var serializedData = JsonUtility.ToJson(gameState);
var filePath = Application.persistentDataPath + "/" + fileName;
File.WriteAllBytes(filePath, serizliedData);
}
public static T Load<T>(string fileName = "gamesave.dat")
{
var filePath = Application.persistentDataPath + "/" + fileName;
var serizliedData = ([]byte)(null)
try
{
serizliedData = File.ReadAllBytes(filePath);
}
catch (System.IO.FileNotFoundException)
{
return null;
}
return JsonUtility.FromJson<T>(serializedData);
}
如此一來也能將想保留的事物以影像的方式留存下來了,下一篇將要講的是如何保留文字的方式,有興趣的話千萬別錯過,每週一到五中午12點,Sun師綜合台 - 關於保留美好回憶這件小事。