どうも~!新入社員のタケです!
いままで長らく…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週間くらい格闘していたのでなんとか…何とかできてよかったです…
忘れないためにも、ちゃんと書いて覚えておかないといけませんね~!
コメント
コメントを投稿