Google

2012年9月6日木曜日

Unityでコインゲー開発:セーブロード

今回はデータ永続化の話。

ゲームはユーザのプレイ情報を記録しなければなりません。
コインゲームでは以下のような情報を記録しました。

 ・コイン、アイテム等の残枚数
 ・画面に出ているインスタンスの位置、RididBody情報
 ・最終セーブ日時

保存よみこ処理を簡略化したかったので、使ったプラグインはこれ。


現在バージョン2ですが、私が開発で使ってた頃は1でした。
内容は単純で、Unityの永続化機能をラッパー化し、便利にしただけの代物です。
が、まあこれも実装速度には役立ちました。

具体的には配列のオーバロード関数があるのが非常に便利です。
ループではなく、情報を配列にすることでまとめられる関数があるので、コードは比較的少なめの実装を行えるのが利点ですかね。
あとは情報とキーの組み合わせで一意に決まるので管理も楽です。

このツールのハマり点としてはこんな感じ。

 ・間違っても日本語のキーを指定してはいけない(特にMacOSX)
  →コンソールからしか消せないゴミデータが残ります。
 ・Unity Editor上で謎のエラーが出るが動作はする

Transformまで保存できてしまうというこの便利さを利用して、コインゲームでは位置だけでなく、コインが動いている情報まで保存していました。
だって、横に飛んでる最中のコインが次回まっすぐ落ちたら変ですし。
ということで、次回の動きを再現したいなら以下のパラメータを保存しておきましょう。

 gameObject.transform以下の、、、

  ・position
  ・rotation

 gameObject.rigidbody以下の、、、
  ・verocity
  ・angularVelocity

これらを保存し、ロード時に設定すれば前回終えた瞬間からの再現が可能になります。
インスタンス管理システムと連動すればさらに良い管理になるんではないかと。

次回はゲームにつきもののチート対策(簡単なやつですが)予定です。


2012/09/07 追記

EasySaveで保存する場合、概念としてはn個のファイルにストリーム書き出しするような概念になります。
なので、順序はきっちり守らないといけません。
また、EasySave.fileExists()でファイルが存在するかどうかを行わなわず、実行時に存在しないとエラーとなり、実行が止まってしまうので注意しましょう。

0 件のコメント:

コメントを投稿