【ハルシオンブログ】Unityのバージョン変えたらデータのSerialize後にDesirializeができなくなった!そんな時の解決方法の一つ。
こんにちは、坂内です。
みなさんご自分のアプリは64対応してますか?
うちのポケガはしていませんでした。
ってことで、64対応をしようとしたままドはまり中です。
まぁ その中で1点Serialize、Desirializeについて分かったことをご報告。
現在ポケットガールにて、保存するデータをシリアライズしてPlayerPrefabに保存とかしてます。
もちろんロード時にはデシリアライズしてます。
簡単にかつ「64ビット対応するなら新しいUnityにしちゃえ」ってことで、Unity2017⇒Unity2019を試していたら、起動時に以下のようなエラーが出て動かなくなりました。
え?ロードできない?
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違うとだめらしいんで、皆さんお気をつけをば!
さて、今日もビルドのトライアルアンドエラーの日々よ。
早く、ビルド作業終わらせたい・・・・あでゅ~ノシ
みなさんご自分のアプリは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)
« 【ハルシオンブログ】Stretch設定をしているオブジェクトのRectTransformのサイズの取得 | 【ハルシオンブログ】3Dオブジェクトのワイヤーフレーム化。 »
コメント
| h o m e |