試した環境
- Unity5.6
- Unity2017
- mac osx sierra
シリアライズして保存するところ
GameManager.cs
void Save<T>(string key, T obj)
{
if (null == obj) return;
var mem = new MemoryStream();
#if UNITY_IOS
System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
#endif
var b = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
b.Serialize(mem, obj);
PlayerPrefs.SetString(key, System.Convert.ToBase64String(mem.ToArray()));
}
試した事。
GameManager.cs
public List<Vector3> segmentPos;
SerializationException: Type UnityEngine.Vector3 is not marked as Serializable.
Vector3のシリアライズはアクセサがないからかな。。
GameManager.cs
public List<Vector3> segmentPos {get;set;} = List<Vector3>();
public List<Vector3> gnormales {get;set;} = new List<Vector3>();
Assets/Scripts/Obj/Bonsai/LSystemsModel.cs(28,26):
error CS1644: Feature `auto-implemented property initializer'
cannot be used because it is not part of the C# 4.0 language specification
この書き方はC#4.0以降じゃないと、だめみたいなので、
Unity5.6から、Unity2017にアップデートし。
PlayerSettingのConfigrationを、「.Net4.6」にし、Unity再起動。
エラーが消えた!
が、
SerializationException: Type 'UnityEngine.Vector3' in Assembly 'UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
Vector3や、Vector2、Quaternion等のUnityEngineの構造体は、
シリアライズできないみたいなので。
結局、Vector3をカスタムで構造体化。
Listから、配列にいれたかったので、
ToArray()メソッド等考慮。
で一応保存実行できた。。が、
読み込み時に、こんどはこういうエラーが。
SerializationException: End of Stream encountered before parsing was completed.
シリアライズするまえに処理がおわったってこと?
で、結局。
JsonUtilityというのを使うとすべて解決してしまったww。
参考にさせて頂いたサイト
http://qiita.com/keidroid/items/24e03f82d74560dc557a