ハイスコア処理で苦労した事!
ハイスコア処理で苦労した点。それは・・・
なぜかハイスコアが保存されない(デフォルト値のまま)
僕が最初にやっていた処理を見せる。
処理の内容としては・・・
・Boxコリジョンにプレイヤーがオーバーラップ。現在のステージのセーブデータが存在するかチェック。
・1回目のプレイはセーブデータが存在しないので、Falseへ。
・ゲームモードからスコア(タイム)を参照。CreatSaveGameObjectで新規セーブデータを作成し、変数に格納。
・ハイスコアにも格納。最後にセーブ。
・2回目以降のプレイ。Trueの処理。
・CreatSaveGameObjectで新規にセーブデータを作成。ゲームモードからスコア(タイム)を参照。変数に格納
・セーブデータをロード。
・ハイスコア判定。現在のクリアータイム(スコア)と前回のハイスコアを比較。
・ハイスコアならTrueへ行き、ハイスコアを上書き。ハイスコアじゃなければFalseへ。
さて、なぜ
なぜかハイスコアが保存されない(デフォルト値のまま)
↑のような問題が起きたのか。原因は、
ステージをクリアーする度、新規にセーブデータを作成していたから。
1回目のプレイで、CreatSaveGameObjectで新規に現在のステージのセーブデータを作成。
スコアが保存され、ハイスコアも保存される。
もう一度プレイした時、
またCreatSaveGameObjectで新規にセーブデータを作成しているのだ。
そうなると、前回ハイスコアに保存していた値がリセットされてしまう。
セーブデータを記録用紙に例えるなら・・・
1回目のプレイの記録用紙が
ぺらっと新しい記録用紙に変えられて記録されるようなもの。(分かりにくい絵かも・・・)
しかも2回目以降の処理は、
・現在クリアーした時のスコアを保存。
・前回のハイスコアと現在のクリアータイムを比較
という流れだ。
この時点で
ハイスコアには何も値(スコア)が格納されていない。
何故なら、前回のハイスコアの記録が先程の↓イラストのように無くなってしまっているからだ。
だからハイスコア配列はデフォルト値を返すしかないのだ。
ハイスコア配列のデフォルト値は「0」
「0秒」以下でクリアーなど出来るはずもないからどんなに早くクリアーしても一生ハイスコアという事にはならないのである。
自分なりに分かりやすく解説したつもりだがどうだっただろう・・・
何かの役に立てれば幸い。
それではまた!^^ノシ