SaveDataのロード
JSON形式でデータを保存することはできたのですが、保存されているデータをデシリアライズ?することができません。
ロードしたときに"SaveData"クラスの変数に値が入っていません。
どこをどのように直したらよいでしょうか?
"SaveLoadFile"の"Load"は別のシーンのButtonに追加されています。
発生している問題・エラーメッセージ
なし
該当のソースコード
C#
1using UnityEngine; 2using System.Collections; 3using UnityEngine.UI; 4using System.IO; 5using System.Runtime.Serialization.Formatters.Binary; 6using System; 7using UnityEngine.SceneManagement; 8 9public class SaveLoadFile : MonoBehaviour 10{ 11 12 // 入力フィールド 13 [SerializeField] 14 public string inputField; 15 16 [SerializeField] 17 public float HPdata; 18 [SerializeField] 19 public float playerxdata; 20 [SerializeField] 21 public float prayerydata; 22 23 // ファイルストリーム 24 private FileStream fileStream; 25 // バイナリフォーマッター 26 private BinaryFormatter bf; 27 28 29 public player PlayerSclipt; 30 public DamageCheckSclipt HPSclipt; 31 32 33 public SaveData saveData; 34 35 36 void Start() 37 { 38 } 39 40 void Updata() 41 { 42 43 } 44 45 46 public void SaveData() 47 { 48 PlayerPrefs.SetString("PlayerData", saveData.GetJsonData()); 49 } 50 51 public void Save() 52 { 53 54 HPdata = HPSclipt.HP(); 55 playerxdata = PlayerSclipt.X(); 56 prayerydata = PlayerSclipt.Y(); 57 58 59 saveData.SetHp(HPdata); 60 61 saveData.SetPlayerX(playerxdata); 62 63 saveData.SetPlayerY(prayerydata); 64 65 66 inputField = saveData.GetJsonData(); 67 68 69 bf = new BinaryFormatter(); 70 fileStream = null; 71 72 73 74 75 try 76 { 77 // ゲームフォルダにfiledata.datファイルを作成 78 fileStream = File.Create(Application.dataPath + "/filedata.dat"); 79 // クラスの作成 80 Data data = new Data(); 81 // 入力フィールドのテキストをクラスのデータに保存 82 data.dataText = inputField; 83 // ファイルにクラスを保存 84 bf.Serialize(fileStream, data); 85 } 86 catch (IOException e1) 87 { 88 Debug.Log("ファイルオープンエラー"); 89 } 90 finally 91 { 92 if (fileStream != null) 93 { 94 fileStream.Close(); 95 } 96 } 97 } 98 99 public void Load() 100 { 101 bf = new BinaryFormatter(); 102 fileStream = null; 103 104 if (PlayerPrefs.HasKey("PlayerData")) 105 { 106 var Data = PlayerPrefs.GetString("PlayerData"); 107 JsonUtility.FromJsonOverwrite(Data, saveData); 108 } 109 110 try 111 { 112 // ファイルを読み込む 113 fileStream = File.Open(Application.dataPath + "/filedata.dat", FileMode.Open); 114 // 読み込んだデータをデシリアライズ 115 Data data = bf.Deserialize(fileStream) as Data; 116 } 117 catch (FileNotFoundException e1) 118 { 119 Debug.Log("ファイルがありません"); 120 } 121 catch (IOException e2) 122 { 123 Debug.Log("ファイルオープンエラー"); 124 } 125 finally 126 { 127 if (fileStream != null) 128 { 129 fileStream.Close(); 130 } 131 } 132 133 } 134 // 保存するデータクラス 135 [Serializable] 136 class Data 137 { 138 public string dataText; 139 } 140}
C#
1using UnityEngine; 2using System.Collections; 3using System; 4 5[Serializable] 6public class SaveData : object 7{ 8 [SerializeField] 9 public float SplayerX; 10 [SerializeField] 11 public float SplayerY; 12 13 [SerializeField] 14 public float Shp; 15 16 public void SetHp(float SHP) 17 { 18 this.Shp = SHP; 19 } 20 21 public void SetPlayerX(float SPLAYERX) 22 { 23 this.SplayerX = SPLAYERX; 24 } 25 26 public void SetPlayerY(float SPLAYERY) 27 { 28 this.SplayerY = SPLAYERY; 29 } 30 31 32 public float GetHp() 33 { 34 return Shp; 35 } 36 37 public float GetPlayerX() 38 { 39 return SplayerX; 40 } 41 42 public float GetPlayerY() 43 { 44 return SplayerY; 45 } 46 47 48 49 50 51 public string GetJsonData() 52 { 53 return JsonUtility.ToJson(this); 54 } 55 56}
C#
1using UnityEngine; 2using System.Collections; 3using UnityEngine.UI; 4using UnityEngine.SceneManagement; 5 6public class ProcessingUI : MonoBehaviour 7{ 8 9 public bool C = false; 10 11 12 void Start() 13 { 14 15 } 16 17 public void StartingSampleScene() 18 { 19 SceneManager.LoadScene("SampleScene"); 20 PlayerPrefs.DeleteKey("PlayerData"); 21 C = false; 22 } 23 24 public void LoadingSampleScene() 25 { 26 SceneManager.LoadScene("SampleScene"); 27 C = true; 28 } 29 30 public bool Continue() 31 { 32 return C; 33 } 34 35 public void LoadingTitleScene() 36 { 37 SceneManager.LoadScene("TitleScene"); 38 39 } 40 41 42 43}
参考資料
//Unityでゲームデータのセーブ・ロードを行う方法
https://gametukurikata.com/program/savedata
補足情報(FW/ツールのバージョンなど)
Unity 2020.3.9f1
回答2件
あなたの回答
tips
プレビュー