前提・実現したいこと
unityでセーブ機能を追加したいと思い色々調べてとりあえず下のようなスクリプトを書いてみたのですが、これをどう用いればいいのかわからず困っています。
具体的には、チャプターセレクトなどで進行度をに応じて章を選択できるようにしたり音量などの情報を自動でjsonファイルに書き込み呼び出し、適宜使用できるようにしたいのです。
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; [System.Serializable] public class Savedata { public int scene = 1; public int progress = 1; public int volume = 50; } public class Save : MonoBehaviour { void Start() { Savedata savedata = loadPlayerData(); } public void savePlayerData(Savedata savedata) { StreamWriter writer; string jsonstr = JsonUtility.ToJson(savedata); writer = new StreamWriter(Application.dataPath + "/savedata.json", false); writer.Write(jsonstr); writer.Flush(); writer.Close(); } public Savedata loadPlayerData() { string datastr = ""; StreamReader reader; reader = new StreamReader(Application.dataPath + "/savedata.json"); datastr = reader.ReadToEnd(); reader.Close(); return JsonUtility.FromJson<Savedata>(datastr); } }
試したこと
現時点で試したことは
・シーン内に空のオブジェクトを作って上のスクリプトをアタッチ
・https://xr-hub.com/archives/11782 を参考に、スクリプトを下のように書き換えてUIなどを作成
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class Button_TITLE : MonoBehaviour 7{ 8 [SerializeField] GameObject P_main; 9 [SerializeField] GameObject P_chapter; 10 [SerializeField] GameObject P_chapter_n; 11 [SerializeField] GameObject P_option; 12 [SerializeField] GameObject P_description; 13 14 Save save; 15 16 // Start is called before the first frame update 17 void Start() 18 { 19 BackToP_main(); 20 save = new Save(); 21 } 22 23 public void GoChapterselect() 24 { 25 if (save.progress = 1) 26 { 27 P_main.SetActive(false); 28 P_chapter.SetActive(true); 29 } 30 else 31 { 32 P_main.SetActive(false); 33 P_chapter_n.SetActive(true); 34 } 35 } 36 public void GoOption() 37 { 38 P_main.SetActive(false); 39 P_description.SetActive(false); 40 P_option.SetActive(true); 41 } 42 43 public void GoDescription() 44 { 45 P_option.SetActive(false); 46 P_description.SetActive(true); 47 } 48 49 public void BackToP_main() 50 { 51 P_main.SetActive(true); 52 P_chapter.SetActive(false); 53 P_chapter_n.SetActive(false); 54 P_option.SetActive(false); 55 } 56}
としたのですが、動いてくれません。
発想としては、セーブデータを読み込むためのオブジェクトを作ってそれでシーンごとにデータを読み込み、それを参照してシーンないでデータを取り扱う、というものだと考えているのですが、これは正しいでしょうか?
初心者故説明不足な点も多々あると思われます。すみません。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
unity 2021.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。