Entries

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

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

それじゃぁ本題。


ゲーム本体はこちらから

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

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

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

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

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

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

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

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

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


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

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

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

ツイート このエントリーをはてなブックマークに追加 ラインで送る Pocketに保存
関連記事

コメント

コメントの投稿

コメントの投稿


トラックバック

トラックバック URL
https://nekosuji.com/tb.php/193-e5fbc529
この記事にトラックバックする(FC2ブログユーザー)

サイト内検索

 

アーカイブ
 
 
 
プロフィール

最新記事
【身辺雑記】最近のこととか少しだけ 2019/10/23
【雑記】ふぁるめてとMEGWINTVの問題が解決した件について 2019/10/15
【Steambirds Alliance】エレメンタルウェポンの紹介 2019/10/13
【雑記】ふぁるめてとMEGWINTVの問題が解決しそうな件 2019/10/10
【Steambirds Alliance】よく使う機体『Old Faithful』の紹介 2019/10/09
【身辺雑記】YouTubeチャンネルの整理 2019/10/04
ワイロ
欲しいものリスト

欲しいものリストです。
酒とつまみぐらいしか欲しいものがねぇ……w


PayPalからのカンパです。
寄付すると新しい何かが生まれるかもしれない……

よく見られる記事
QR
Copyright © ねこすじのゲーム哲学 All Rights Reserved.