Unityでセーブ/ロード処理
Unity 5.3.0f4 (64-bit)。
AndroidとWebGLで出力したいと思っています。
軽く調べた限りでは、二通りの方法がありそう
(後者使う意味はあんまりないと思います)
1. PlayerPrefsクラスを使う (UnityEngine)
Unityマニュアル
http://docs.unity3d.com/ja/current/ScriptReference/PlayerPrefs.html
- セーブ/ロード機能向けに提供されているクラス
- いわゆるKey-Value型
- 型が限定されている。float、int、stringのみ。
- バイナリデータで保存される
- WebPlayerで使用する場合、1Mのサイズ制限あり(1M=1,048,576Byte)
using UnityEngine; using System; public class Test : MonoBehaviour { public string SaveData { get; set; } private string SaveKey = "hoge"; void Start() { // ロード SaveData = PlayerPrefs.GetString(SaveKey, "未定義の場合の初期値"); Debug.Log(SaveData); } public void Save(string Data) { // セーブ SaveData = Data; PlayerPrefs.SetString(SaveKey, SaveData); PlayerPrefs.Save(); } }
2. Fileクラスを使う (System.IO)
.NET Framework クラス ライブラリ
https://msdn.microsoft.com/ja-jp/library/system.io(v=vs.110).aspx
- 保存可能容量が多そう
(1MあるならPlayerPrefsでいいか、と思ったらこっち調べるのめんどくさくなってしまった…。そのうち追記) - そのまま保存される
例えばオリジナルステージを作って出力してユーザー同士で共有するとか
そういう使い方に向いてるのかも
using UnityEngine; using System.Collections; using System; using System.IO; public class Test : MonoBehaviour { public string SaveData { get; set; } private string FileName = "hoge.dat"; void Start() { if (File.Exists(Application.dataPath + FileName)) { using (StreamReader sr = File.OpenText(Application.dataPath + FileName)) { // ロード SaveData = sr.ReadToEnd(); Debug.Log(SaveData); } } } public void Save(string Data) { // セーブ SaveData = Data; using (StreamWriter sw = new StreamWriter(Application.dataPath + FileName, false)) { sw.WriteLine(Data); sw.Flush(); sw.Close(); } } }