【3DダンジョンRPG開発】セーブロード実装

本題とは関係ないけど、今週は『The Vagrant』ってゲームを購入して遊んだ。ヴァニラウェア作品を愛している作者が3年以上の歳月をかけて作った作品らしいんだけど、半額セールで200円という低価格ながら、凄くクオリティが高くてとても面白かった。

僕も、今作っているゲームは最終的にSteamで売り出すつもりでいるんだけど、このクオリティをこの値段で出されちゃうとなんか尻込みしちゃうね。

採算取れるのだろうか?

それじゃぁ本題。


ゲーム本体はこちらから

見ての通り、スロットは合計3つで、別のスロットにセーブしたりは出来ない。セーブはシーン切り替え時とゲーム終了時に自動でするようにしているけど、後々セーブポイントを作ってそこにセーブする形にすると思う。

というのも、ここら辺の仕様はなかなか難しい問題をはらんでいて……

・オートセーブ
-どのタイミングでも復帰できるようにする必要がある
-デバッグが大変
-オフゲではセーブスロットを分けるのが基本。

・能動的なセーブ
-宝箱の前でいいものが出るまでロードする。
-強敵が出現したからロードして回避する。
→それを前提とした作りを考える必要がある。

・セーブポイントでのセーブ
-やり直しに『時間』というペナルティが付く。
→相当しっかりした作りでないと、ハングして萎える事態が発生する。

一番いいのはオートセーブなんだろうけど、個人製作じゃデバッグも難しいだろうし、単一データファイルでやるのはリスクが高い。あと、今はまだいいけど、データが多くなったらセーブに時間がかかりそう。

僕の目指す難易度というのはプレイヤーが自然と自分に合ったものを選択できるというもので、例えば、脅威レベルというシステムは上げれば難易度が上がるけど、ドロップもうまくなる。でも上げすぎて死ぬと逆に効率が落ちてしまう。ハードモードとかそういったのを作らない代わりに、難易度選択自体にゲーム性を付与する。その対価は『時間』という形を取りたいなと思っている。

だから、宝箱の前でセーブしていいのが出るまで繰り返すとか、強敵に出くわしたからロードしてやり直すとか、完全にできなくするつもりは無いけど、それを前提にしたバランス調整はしないし、可能な限りずる出来ないようにしたいとは思っている。

ちなみに、ハングでやり直しは最初に書いた『The Vagrant』でも発生したなぁ。それもセーブ画面に入った瞬間でw

今回も、問題が発生して手間取ったので忘れないようにメモ。


◆JsonUtility.ToJson を呼んでデータをシリアライズ化する時、メンバ変数にnullオブジェクトがあると、勝手にオブジェクトを生成してしまう。

今回の場合、
[SerializeField] Character[] m_Chara = new Character[6];
こんな感じでPTメンバーを管理してて、この並びがそのままPTの並びで、間がnullならそこが空きスロットみたいな感じにしてたんだけど、セーブして戻るとなぜか空きスロットにキャラクターが生成されていた。

仕様としてnullは保存できないってことなんだろうけど、元データ内で勝手に生成したうえで文字列データを出力しているとは思わなかったw

0 件のコメント:

コメントを投稿

お気軽にどうぞ。

※他の方から見て不快になるもの、記事の内容から逸脱したものは削除することがあります。
 管理人からの返信は必ず行われるわけではありません。