Size_AA_Batteryのブログ

あれっすよ。更新頻度めっちゃ低いっすよ。

某記事様の、物凄く使い易いセーブ機能について

magnaga.co

こちらの記事にて紹介されている「セーブデータをjson化して保存する」という物。

これがもう、使い易いのなんのって…。

自己流でUnityを弄り続けている自分でも、簡単に扱う事ができ、且つ高機能。最序盤の勇者に「はかいのてっきゅう」を持たせる様な。兎に角、最強。

しかし…

 「Unity2017.3.0f3」使用で(恐らくUnity2017.3.0f2も同様)、ある問題が生じちゃったんだなあこれが。ホンット勘弁してほしい。

※[注意]以下、某記事様のセーブ機能を「某セーブ」とします。

※[要注意]「jsonセーブ」及び「json」関連についての適切な理解が無い為、あくまで個人的解釈の下、個人的な解決方法を行います。何かの参考になれば、程度の意図で作成した記事と解釈していただける様、御了承願います。

何があったのか(何をしたのか)

①:Unityを開く。(アプデ後最初の起動)

②:プロジェクトを開く。(プロジェクトバージョン変換)

③:編集可能状態、いつも通り作業を行う。

④:SaveData.Load()使用時、null参照エラーが起きている事に気付く。(しかし無視)f:id:Size_AA_Battery:20171226193223p:plainf:id:Size_AA_Battery:20171226193233p:plain

⑤:[Save_Scene][Save_Project]を行う。

⑥:Unityを閉じる。

⑦:エラーリポート。

⑧:気になってもう一度Unityを開く。

⑨:同じプロジェクトを開く。

⑩:アプデ後のプロジェクトバージョン変換が、再び行われる。

⑪:編集可能状態、SaveData.Load()使用時のエラーを覗く。(前述の物)

⑫:生成されたセーブデータを見に行く。

└「C:\Users\”ユーザー名”\AppData\LocalLow\"カンパニー名"\"プロジェクト名"」

└「"カンパニー名"."プロジェクト名".savedata.json

⑬:目立った異常が見当たらなかった為、色々な試行錯誤を行う。

###

㊿:問題特定。

特定された問題

トリガー:「jsonセーブ」内、Load()の使用かと思われる。

症状①:Unity終了時、エラーレポートが表示される。

└恐らく[Save_Scene][Save_Project]の使用は関係無いかと思われる。

症状②:生成されたセーブデータの内容が、全て消去される。

└というより、リセット?0KBのファイルが再生成されている様にも見える。

現状の解決法(苦し紛れの解決法)

「Unity終了直前」

・「C:\Users\”ユーザー名”\AppData\LocalLow\"カンパニー名"\"プロジェクト名"」やデスクトップ等、解り易い箇所に「退避フォルダ」等ファイル退避場所を作成、「"カンパニー名"."プロジェクト名".savedata.json」(セーブデータ)を保存(or複製)する。

⇒終了時、エラーリポートが出現し、元々のセーブデータの内容が消去されるが、退避したセーブデータは安全である為、セーフ。

 

「Unity開始時」

・プロジェクトを開き、編集が可能となった時点で、退避場所に保存してあるセーブデータを「C:\Users\”ユーザー名”\AppData\LocalLow\"カンパニー名"\"プロジェクト名"」へ複製。

└もぬけの殻(0KB)となったセーブデータへ上書きする。兎に角更新する形で。

⇒SaveData.Load()も通常通り行われ、前述のnull参照エラー等も一切出てこない。

記事作成時点では、この方法で問題なく作業を行う事が出来ています。

個人的考察

 ・過去記事「Othersについて」「アップデート後の…」の解決策を漁っている時、「npm」「unity3d-package-syncer」辺りの情報を頻繁に見かけまして、どれも「package.json」と関連してる事から「ん?これjson関係アリか?」と解釈。

・「そういえば、Unity2017.3.0f2にアプデした時も、package.jsonで凄い苦戦したよな…。やっぱり、package.json関連で何かしらの変更点あったのでは」

・その問題に直面する前では、そもそもpackage.jsonの存在すら知らず、今の今までその様な問題にぶち当たった事も無かったので、この件のトリガーは、Unity2017.3.0f2へのアップデートしかない。

・そういや「某セーブ」内Load()の中身、JsonUtilityっての使ってるよな。StreamReaderが含まれてて、sDictって変数に代入してるし、しかもnull参照なってるのがこの変数sDictだし、あれえ?やっぱJson関係修正入ったかあ?これが問題ならそもそもUnity2017.2.0f2辺りで生じててもおかしくは無い訳だし…。

・「jsonutility.fromjson」「jsonutility」「Unity2017.3.0f2 fix」で調べてもあまり引っ掛からないなあ…。やっぱ検討違いか?

 ⇒取り敢えずjson関連で何かしら変更が入ったと解釈する事に。

結果的に

「別に使えなくなった訳じゃないし、ちょっとの手間くらい我慢しよう。」というのが終着点になりました。

原因不明。当分は苦し紛れの解決法を使う事にし、解決法が分かったのなら検証した上、こちらの記事に追記させていただこうかと思います。