LoginSignup
1
0

More than 5 years have passed since last update.

Unity List<Vector3>をシリアライズして保存したい。。

Posted at

試した環境

  • 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をカスタムで構造体化。

参考:https://github.com/KeenSoftwareHouse/SpaceEngineers/blob/master/Sources/VRage/Serialization/SerializableVector3.cs

Listから、配列にいれたかったので、
ToArray()メソッド等考慮。

で一応保存実行できた。。が、

読み込み時に、こんどはこういうエラーが。

SerializationException: End of Stream encountered before parsing was completed.

シリアライズするまえに処理がおわったってこと?

で、結局。
JsonUtilityというのを使うとすべて解決してしまったww。

参考にさせて頂いたサイト
http://qiita.com/keidroid/items/24e03f82d74560dc557a

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0