top of page
執筆者の写真Reo

ScriptableObject保存の罠

更新日:2020年8月3日

こんにちは.

TGS応募直後の土日は久しぶりに少しくらいはゲームするかなぁと思ってたのですが

全く手を付けることなく過ぎていきました.

開発三昧でもなお時間が足りないと感じてゲームをしようという気にならなかったので・・・実際進んではいるものの自分の中での土日のノルマラインはぎりぎり突破できたかなというくらいでした.ヤバイ.苦笑




今日はちょっとだけ開発に関して困ったことを書きます.

Unityでデータ保存をする時,みなさんどうされているでしょうか.

私は最近よくScriptableObjectというものをよく使います.

とても便利で使い勝手の良い子なのですが,コードから作成したり保存したりしようとするとちょっとまだ沼にはまることがあります.



今回はモニカの戦術星海の眼両方で似たようなコードを書いて

どちらも失敗して浅めの泥沼にしばらく使っていました.


ですので備忘録的に書いておこうと思った次第です.

まぁと言っても一行だけの話なんですけどね,これに気づけず

しかもちょっと時間差で見つけて何が悪いのかいろいろ引っ掻き回すことになってしまいました.


 

モニカの戦略ではCSVからデータを読み込んでStringBuilderを使ってもろもろ書いたスクリプトを作成し,自動でそのスクリプトを使ってScriptableObjectにしています.

星海の眼ではアイテムデータを同じくCSVからScriptableObjectにしています.

 var data = ScriptableObject.CreateInstance(NAME) as NAME;
 
 //略
 
 AssetDatabase.CreateAsset(data, path);
 AssetDatabase.ImportAsset(path);

で,ざっくり作成するためにこんなコードを書くのですが

このままでもある程度ちゃんと動いているように見えます.見えてしまいます...Unityを再起動するまでは.



結論としてはScriptableObjectってUnityを再起動すると中身がもとにもどっちゃうので,

EditorUtility.SetDirty(data);

と処理の最後に書いてやらないといけないのですが,

割と寝ている間もUnity起動しっぱなしだったりしてUnityを終了しなかったのが今回のネックになりました.



 

共通のデータを管理したり,AI行動に利用したり

まだまだScriptableObjectには他にも使い道があると思いますし

ながーい付き合いになると思うので

この一行の存在だけは今後気を付けようと思います...

時間差でバグるとどこが悪かったのか考える範囲が広くなっちゃうので

Unity閉じなきゃ見つからないバグはやめてほしいですね,本当. 苦笑



今日はこんなところで,開発に戻りたいと思います.

ご存知のことばかり書いていると思われるかもしれませんが,

何分まだまだ初心者なのでご容赦ください(;'∀')

それでは.






 

追記

シーン遷移などで参照が外れてリセットされたりするケースがあるようです.

まぁ今のところシーンまたぐ使い方はほぼしてないから今回のプロジェクトでは大丈夫かな・・・星海のロード時は別ファイルからリロードしてるし今のところ問題なし.

閲覧数:2,790回0件のコメント

最新記事

すべて表示

Comments


bottom of page