Unity Asset "All Platforms Save"の使い方 (和訳)
Unityで重宝しているアセットに「All Platforms Save」があります。
レビュー評価が高いにもかかわらずスクリプトリファレンスがない&日本語の紹介記事も見当たらないので、Documentationの要点だけでも和訳してみたいと思います。
こちらのセットにも同梱されています。
このアセットで出来ること
- セーブ・ロードまわりの処理を最低限のコーディング労力で実装できる
- PlayerPrefsを保存先にすることもできるし、自分で指定した外部ファイルに保存させることもできる
- ビルド時のプラットフォームが複数あっても同じコードのままでOK
- 複数のセーブデータを保持できる
初期設定
アセットをインポートしたら、Window -> Gley -> All Platforms Save を開く。
目的のビルドターゲットと保存形式を設定したらSaveする。
保存形式 | シリアライズ形式 | 保存場所 |
---|---|---|
JSONSerializationFileSave | JSON | 外部ファイル |
JSONSerializationPlayerPrefs | JSON | PlayerPrefs(string型) |
BinarySerializationFileSave | バイナリ | 外部ファイル |
BinarySerializationPlayerPrefs | バイナリ | PlayerPrefs(string型) |
ビルドターゲットには File -> Build Settings -> Platform で設定したのと同じものを含めるようにする。
Script作成
クラスの作成
セーブデータを格納しておくクラス
セーブデータを格納するためのクラスを作ります。
このクラスには[System.Serializable]をつけ、変数をすべてpublicにする必要があります。
このクラス内に書かれたオブジェクトは、すべてserialize可能(save可能)になります。
// 例
[System.Serializable] public class GameValues
{
public double version = 0;
public bool showVideo = true;
public int totalCoins = 0;
public float musicVolume = 1;
public string randomText = "Random Text";
public List<Level> levels = new List<Level>();
}
Transform、GameObject、Color、Vector3といったUnityEngineのオブジェクトの中には、serializableに出来ないものがあります。
その場合は値型の変数を組み合わせたクラスを別途定義して下さい。
// Colorをserializableにする方法:
[System.Serializable] public class SerializableColor
{
public float r;
public float g;
public float b;
public float a;
}
セーブ/ロード処理を書いておくクラス
セーブデータを格納するクラスとは別に、ロード/セーブ処理を書くためのクラスを作ります。
public class TestSave : MonoBehaviour
{
GameValues gameValues = new GameValues();
bool encrypt = true; //trueならXORで暗号化する
string fullpath;
void Awake()
{
fullpath = Application.persistentDataPath + "/SavedData";
}
// ここから下にLoad/Save処理のメソッドを書いていく
}
ロード
SaveManager.Instance.Load<GameValues> (fullPath, LoadComplete, encrypt);
引数 | 説明 |
---|---|
GameValues | セーブデータを格納しているクラスの名前 |
fullPath | セーブデータの保存場所 |
LoadComplete | Load処理が完了した時に呼ばれるメソッド名 |
encrypt | trueならXORアルゴリズムでセーブデータを暗号化する |
// Loadメソッドの完了後に呼ばれるコールバック:
private void LoadComplete(GameValues data, SaveResult result, string message) {
if (result == SaveResult.Success)
{
// ロード成功時の処理をここに書く
}
}
型 | 引数 | 説明 |
---|---|---|
GameValuesなど | data | 実際にロードされるデータ |
SaveResult | result | セーブ処理の成否 Success/Error |
string | message | エラーメッセージ |
セーブデータをstring型として扱いたい場合
SaveManager.Instance.LoadString(dataToLoadString, LoadStringComplete, encrypt);
引数 | 説明 |
---|---|
dataToLoadString | a string generated by the SaveString method. |
LoadStringComplete | method called when load process is done. |
// LoadStringメソッド完了後に呼ばれるコールバック:
private void LoadStringComplete(GameValues data, SaveResult result, string message) {
if (result == SaveResult.Success)
{
// ロード成功時の処理をここに書く
}
}
セーブ
SaveManager.Instance.Save(gameValues, fullPath, SaveComplete, encrypt);
// Saveメソッド完了後に呼ばれるコールバック:
private void SaveComplete(SaveResult result, string message) {
if (result == SaveResult.Error)
{
// セーブ失敗時の処理をここに書く
}
}
セーブデータをstring型として扱いたい場合
SaveManager.Instance.SaveString(gameValues, SaveStringComplete, encrypt);
// SaveStringメソッド完了後に呼ばれるコールバック:
private void SaveStringComplete(SaveResult result, string resultString) {
if (result == SaveResult.Error)
{
// セーブ失敗時の処理をここに書く
}
else
{
// string型の変数(ここではdataToLoadString)に全セーブデータを保存することで、以後利用できるようになります。
dataToLoadString = resultString;
}
}
型 | 引数 | 説明 |
---|---|---|
string | resultString | 全てのセーブデータがstringとしてシリアライズされたもの |
その他のメソッド
特定のセーブデータを削除する
// pathで指定されたファイル名のセーブデータを削除します:
SaveManager.Instance.ClearFIle(fullPath);
全てのセーブデータを削除する
// pathで指定したフォルダで検出された全てのセーブデータを削除します:
SaveManager.Instance.ClearAllData(path);
参考
Author And Source
この問題について(Unity Asset "All Platforms Save"の使い方 (和訳)), 我々は、より多くの情報をここで見つけました https://qiita.com/ebitaigames/items/a78d221333ec0b666b04著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .