Unity C#

【Unity C#】セーブ機能PlayerPrefs+JsonがAndroid実機で動作しない

投稿日:

Unity で最も簡単にセーブ機能を導入できる PlayerPrefs + Json が Android 実機で動作しないという問題にぶち当たりました。

Unity エディタ上や WebGL では問題なく動作するのに、Android 実機でテストするとセーブ出来ないことが90%というとても不安定な動作になってしまいます。

マルチプラットフォーム開発の難しさを痛感します。

Jsonとは?

PlayerPrefs では保存できるデータ型が決まっており、int(整数)、float(浮動小数点数)、string(文字列) 型に限られます。

Unity 標準機能となった JsonUtility を使うと bool 型も保存できるようになります。

Json はテキストベースのデータ形式で、bool もテキストとして保存します。

対処したこと

Android では PlayerPrefs を使用せずに、外部に json ファイルを保存する形式に切り替えました。

※冒頭に「using System.IO;」が必要です。
※セーブデータ用のクラスを作っておく必要があります。

準備

private void Awake(){
   filepath = Application.persistentDataPath + "/" + "savedata.json";
   if (File.Exists(filepath)){
      LoadGames();
   }else{
      saveData = new SaveData();
   }
}

セーブデータの json ファイルがあればロード、なければ新規セーブデータを作成。

セーブ

public void SaveGames(){
   string json = JsonUtility.ToJson(saveData);
   StreamWriter streamWriter = new StreamWriter(filepath);
   streamWriter.Write(json);
   streamWriter.Flush();
   streamWriter.Close();
}

ロード

public void LoadGames(){
   if (File.Exists(filepath)){
      StreamReader streamReader;
      streamReader = new StreamReader(filepath);
      string data = streamReader.ReadToEnd();
      streamReader.Close();
      saveData = JsonUtility.FromJson<SaveData>(data);
   }
}

-Unity C#

Copyright© ウェブミスト(Webmist) , 2024 AllRights Reserved Powered by STINGER.