iOSとAndroidでも使用できるunityのデータ保存のサンプルソースです。
保存データ用のクラスをシリアライズして保存しています。
確かunityの推奨している保存方法の一つだったと思います。
iOSnoバージョンが古いとエラーが発生するので旧式の端末ではテストできないかも?
//使用例
private SaveDatas sd ;
private string SAVE ="key文字列";
private void DataSave2(){
SaveKanri.Save(SAVE, sd);
PlayerPrefs.Save();
}
private SaveDatas DataLoad2(){
SaveDatas data_str = SaveKanri.Load<SaveDatas>(SAVE);
if( data_str != null){
return data_str;
}else{
return new SaveDatas();
}
//管理クラス
using UnityEngine;
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class SaveKanri : MonoBehaviour{
public SaveKanri(){
}
public static bool Save<T>(string prefKey,T obj){
MemoryStream memoryStream = new MemoryStream();
#if UNITY_IPHONE || UNITY_IOS
System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
#endif
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize( memoryStream, obj );
string str = System.Convert.ToBase64String( memoryStream.ToArray() );
try {
PlayerPrefs.SetString ( prefKey, str );
} catch( PlayerPrefsException ) {
return false;
}
return true;
}
public static T Load<T>( string prefKey ){
if (!PlayerPrefs.HasKey(prefKey)) return default(T);
#if UNITY_IPHONE || UNITY_IOS
System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
#endif
BinaryFormatter bf = new BinaryFormatter();
string serializedData = PlayerPrefs.GetString( prefKey );
MemoryStream dataStream = new MemoryStream( System.Convert.FromBase64String(serializedData) );
T deserializedObject = (T)bf.Deserialize( dataStream );
return deserializedObject;
}
}
//保存するデータクラス
using System.Collections;
[System.Serializable()]
public class SaveDatas{
[System.Serializable()]
public class InnerClass{
public string instr1;
public int inint;
}
public string str1;
public int[] int10;
public InnerClass inClass;
}
以前までusing PlayerPrefs = PreviewLabs.PlayerPrefs;を使用して保存していました。最近どうもPreviewLabs.PlayerPrefsで以下のエラーが発生して他の保存方法に切り替えました。
以下がエラーログ
PlayerPrefs.Flush NullReferenceException Object reference not set to an instance of an object
0 件のコメント:
コメントを投稿