FC2ブログ
    05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Unityのバージョン変えたらデータのSerialize後にDesirializeができなくなった!そんな時の解決方法の一つ。 

    こんにちは、坂内です。

    みなさんご自分のアプリは64対応してますか?

    うちのポケガはしていませんでした。

    ってことで、64対応をしようとしたままドはまり中です。

    まぁ その中で1点Serialize、Desirializeについて分かったことをご報告。


    現在ポケットガールにて、保存するデータをシリアライズしてPlayerPrefabに保存とかしてます。
    もちろんロード時にはデシリアライズしてます。

    簡単にかつ「64ビット対応するなら新しいUnityにしちゃえ」ってことで、Unity2017⇒Unity2019を試していたら、起動時に以下のようなエラーが出て動かなくなりました。


    SerializationException: The keys for this dictionary are missing.
    System.Collections.Generic.Dictionary`2[TKey,TValue].OnDeserialization (System.Object sender) (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    System.Runtime.Serialization.ObjectManager.RaiseDeserializationEvent () (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (System.Runtime.Remoting.Messaging.HeaderHandler handler, System.Runtime.Serialization.Formatters.Binary.__BinaryParser serParser, System.Boolean fCheck, System.Boolean isCrossAppDomain, System.Runtime.Remoting.Messaging.IMethodCallMessage methodCallMessage) (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler, System.Boolean fCheck, System.Boolean isCrossAppDomain, System.Runtime.Remoting.Messaging.IMethodCallMessage methodCallMessage) (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler, System.Boolean fCheck, System.Runtime.Remoting.Messaging.IMethodCallMessage methodCallMessage) (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler, System.Boolean fCheck) (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream) (at <1f0c1ef1ad524c38bbc5536809c46b48>:0)
    XXXXXXXXXXX.Load[T] (System.String prefKey) (at Assets/Scripts/DATA/XXXXXXXXXXX.cs:38)
    XXXXXXXXXXX.load () (at Assets/Scripts/DATA/XXXXXXXXXXX.cs:73)
    YYYYYYYYYY.Load () (at Assets/Scripts/DATA/YYYYYYYYYY.cs:220)
    ZZZZZZZZZZZZ.Start () (at Assets/Scripts/TITLE/ZZZZZZZZZZZZ.cs:38)


    え?ロードできない?

    Unity2017でゲーム内保存⇒Unity2017でロード 〇
    Unity2019でゲーム内保存⇒Unity2019でロード 〇
    Unity2017でゲーム内保存⇒Unity2019でロード ×
    Unity2019でゲーム内保存⇒Unity2017でロード ×

    えーーーー!うっそでしょー!

    バージョン変えたからって、ロードできなくなるなんて今までなかったよ!?

    めっちゃ調べた結果、海外のフォーラム(どこか忘れた)で、以下のようなやり取りがあった。

    「Script Runtime Version同じか?それが違うとシリアライズデシリアライズあわねえよ」

    まじかー!!!

    ってことで確認。

    Unity2017 .NET 3.5 Equivalent

    Unity2019 .NET 4.x Equivalent


    あぁー違う!


    ってことで、Unity2019の方を.NET3.5 に変えたらいけたー!!!


    なんかRuntimeVersion違うとだめらしいんで、皆さんお気をつけをば!


    さて、今日もビルドのトライアルアンドエラーの日々よ。
    早く、ビルド作業終わらせたい・・・・あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/617-d41f660b
    この記事にトラックバックする(FC2ブログユーザー)