某記事様の、物凄く使い易いセーブ機能について
こちらの記事にて紹介されている「セーブデータをjson化して保存する」という物。
これがもう、使い易いのなんのって…。
自己流でUnityを弄り続けている自分でも、簡単に扱う事ができ、且つ高機能。最序盤の勇者に「はかいのてっきゅう」を持たせる様な。兎に角、最強。
しかし…
「Unity2017.3.0f3」使用で(恐らくUnity2017.3.0f2も同様)、ある問題が生じちゃったんだなあこれが。ホンット勘弁してほしい。
※[注意]以下、某記事様のセーブ機能を「某セーブ」とします。
※[要注意]「jsonセーブ」及び「json」関連についての適切な理解が無い為、あくまで個人的解釈の下、個人的な解決方法を行います。何かの参考になれば、程度の意図で作成した記事と解釈していただける様、御了承願います。
何があったのか(何をしたのか)
①:Unityを開く。(アプデ後最初の起動)
②:プロジェクトを開く。(プロジェクトバージョン変換)
③:編集可能状態、いつも通り作業を行う。
④:SaveData.Load()使用時、null参照エラーが起きている事に気付く。(しかし無視)
⑤:[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関連で何かしら変更が入ったと解釈する事に。
結果的に
「別に使えなくなった訳じゃないし、ちょっとの手間くらい我慢しよう。」というのが終着点になりました。
原因不明。当分は苦し紛れの解決法を使う事にし、解決法が分かったのなら検証した上、こちらの記事に追記させていただこうかと思います。