現在2Dの脱出ゲームを作っていて、その中でセーブ機能を実装したく質問させていただきました。
理想としては、落ちているアイテムを拾う→アイテム欄に拾ったアイテム表示&落ちていたアイテムのオブジェクトを非表示、この状態でセーブしてロードするとそのままアイテム欄のアイテムは表示されたままで落ちていたアイテムは非表示のまま、という感じに考えています。
実装するにあたって色々セーブについて調べました。単純にスコアだけを保存するなら playerprefsといったようなものでいいと思ったのですが、フラグみたいなのを複数管理するならJson形式で保存するのがいい?と思い、以下のscriptをサイトをいくつか参照しながら作成しました。しかし、値の保存はできているのですがゲームオブジェクトの状態の保存まではできないでいます。どうすればゲームオブジェクトの状態まで保存できるのでしょうか?お時間がありましたらご教授お願いします。
コード1 [System.Serializable] public class FlagData { public int a; } public class ObjControll : MonoBehaviour { public GameObject obj;//アイテム欄に表示されるアイテム public GameObject obj_drop;//フィールドに落ちているアイテム public Toggle obj_toggle; public void Save(FlagData saveData)//セーブ { StreamWriter writer; string jsonstr = JsonUtility.ToJson(saveData); writer = new StreamWriter(Application.dataPath + "/savedata.json", false); writer.Write(jsonstr); writer.Flush(); writer.Close(); } void Update() { FlagData saveData = new FlagData(); if(saveData.a!=0){ obj.SetActive(true); obj_drop.SetActive(false); } public void onTap() { FlagData saveData = new FlagData();//セーブデータのインスタンス obj.SetActive(true); obj_drop.SetActive(false); saveData.a++; Save(saveData);//セーブ }
コード2 public class SaveD : MonoBehaviour { public FlagData Load() { if (File.Exists(Application.dataPath + "/savedata.json")) { string datastr = ""; StreamReader reader; reader = new StreamReader(Application.dataPath + "/savedata.json"); datastr = reader.ReadToEnd(); reader.Close(); return JsonUtility.FromJson<FlagData>(datastr); } FlagData saveData = new FlagData(); return saveData; } public void PushLoadButton() { FlagData saveData = Load(); SceneManager.LoadScene("GamePart"); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/19 09:35