【ItsMyHouse】セーブとロード機能を追加してみた!方法によって難易度が大きく変わる!

 どうも~!新入社員のタケです!


いままで長らく…ItsMyHouseにセーブとロードを実装していきました!

正直かなり…いや、今までにないほど苦戦してやっと…やっとできました。

無事実装できて本当に良かった・・・・・・・


今回はファイルのセーブとロードの考え方についてお話してみます。

出来上がったコードもそんなにきれいで見やすいわけじゃないので、まだ自信はないのですが…とりあえず仕組みは理解しました!


まずセーブロードをなぜ実装するのか?というところですが…

ゲームではセーブとロードはあって当たり前の機能ですよね。


It's My Houseはゲームではないのですが、家具をレイアウトした状態を保存して明日続きをやりたい!だとか

データを渡して作ってもらいたい!という風に使われると思うのでセーブ/ロードを実装することになりました。


セーブに関する方法は主にUserPrefsを使う方法と、Jsonなどの外部のファイルに出力して読み込む方法が使われます。


1つ目のUserPrefsを使う方法は、ゲームのスコアなどのちょっとした変数を数十個保存したり呼び出したりするならこれが一番簡単に使うことができます。

セーブとロードがたった数行で書けちゃいます。と~っても使いやすいです。


score_num = PlayerPrefs.GetInt("SCORE", 0 );

これはStartでSCOREというUserPrefsの値を取得してscore_numに代入しています。


OnDestroy()(オブジェクトが消された時の判定)で

PlayerPrefs.SetInt("SCORE", score_num);

PlayerPrefs.Save();

SCOREの中にscore_numの値を代入してセーブするというものです。


この間にscore_numの値を変えてしまえばスコアが切り替わり、セーブされます。


初心者向けの記事などでよく取り上げられます。

だいたいとりあえずの仕組みとして理解するために使われますね。


ただ、簡単なだけにデメリットもあるのです。

保存に使える変数の型が

・String

・Int

・Float

の3種類しか使えません。

このセーブしたデータは一応ファイルに書き出されますが、PCの場合だとレジストリというPCの奥深くにデータが保存されるせいで

ファイルを受け渡ししたりするのがとても難しいらしい(?)です。


2つ目のJsonファイルなど外部ファイルに保存する方法は本格的に実装するときなどに使われます。

今回はこの方法で作っていきます!


Jsonで出力するといいことがたくさん!

まずは保存できる型に制限がほぼありません!

Unityで使用できる型はほぼすべて保存できます。


そして、実際にファイルとして出力されてユーザーが取ってこれるのでそのファイルを共有したりできます。

It'sMyHouseでは実際に仕事で使うことを考えるとレイアウトデータの受け渡しなどができるのはとっても助かりますね。


Jsonでやる方法は私もめちゃくちゃ苦戦した通り、とっても難度が高いです。(たまたま難しかっただけかもしれませんが)


上のほうにある変数を宣言するところは実際にJsonファイルに書き込まれる変数(セーブしたい変数)になります。


下にあるメソッドはすべてセーブ/ロード関係のものです。

左の行数を見るとわかると思いますが、かなりの行数のコードを書いてます。


もちろん次からはある程度大丈夫だと思うのですが、Jsonを使い始めると他の関数も一緒に覚えちゃったほうが習得が速いです。


今回はListとDictionaryという配列っぽいのも駆使して作ってみました。

より便利に使おうとするとこれらの理解も必要になってくると思うのでとてもとても敷居が高いです。



いや~~~もうこれだけで1週間くらい格闘していたのでなんとか…何とかできてよかったです…

忘れないためにも、ちゃんと書いて覚えておかないといけませんね~!


--------------------------------------------------------------------------------

シェルパでは、3DCGや建築パースはもちろん
VRやARアプリの開発も行っています!
新しいことに興味のある方はきっと楽しめると思います!
新人研修も充実していて初心者でも3DCG経験者でも安心!

株式会社シェルパ
【福岡本社】
〒810-0042 福岡県福岡市中央区赤坂1丁目13-10赤坂有楽ビル7F 
【東京オフィス】
 〒101-0041 東京都千代田区神田須田町2丁目13-1YKS黒田ビル5F
TEL 092-717-6800 / FAX 092-717-6801

--------------------------------------------------------------------------------


コメント