EasySave3でローカルハイスコア機能を作ろう

この記事の要旨

定番アセット”EasySave3″を使って、シンプルなハイスコアの記録と表示の機能を作る。記録や読み込みのタイミングは”Arbor3″でのステート管理を利用。

概観

下記の3つのクラスで実装しました。
  • ScoreManager.cs
    • 一回のプレイのスコアを記録するクラス
  • HighScoreManager.cs
    • 上記のスコアを、保存されているハイスコアと比較し、必要なら上書きして保存するクラス
  • HighScoreDescriber.cs
    • 保存されたハイスコアをUI上に表示するクラス

一回のプレイのスコアを記録する

みなさん各自のゲームで実装されていると思うので参考程度に。
HighScoreDescriberクラスをStart()でなく独自のタイミングでGetComponentでキャッシュしているのは、HighScoreDescriberクラスを付与したオブジェクトがPrefab化されており、リザルト画面へ遷移したタイミングで生成されるようにしているためです。
生成後のタイミングでRefreshLevel1HighScore()をArborのSendEventGameObjectを使って呼んでいます。
RefreshLevel1HighScore()では、後述する「ハイスコアの更新確認」「UIへの反映」も合わせて呼んでおり、このメソッドがハイスコア周りの処理の根っこになっています。

結果のスコアを、保存されているハイスコアと比較

とりあえず10個までをハイスコアとして保存するようにList<int>を作成し、デフォルトのスコアデータも入れておきます。
Loadメソッドでは、EasySave3に用意されているES3.Loadメソッドを用いて保存されているハイスコアをロードしています。
CheckLevel1HighScoreメソッドに、結果スコアを引数として渡します。
まずは、FindIndexを用いて、ロードされたハイスコアの中から”結果スコアより大きい値のうち最小値が格納されているインデックス”を探します。
それが存在すれば=ハイスコアにランクインしていれば、Insertで結果スコアを挿入し、はみ出た末尾の要素を削除後、上書きでSaveメソッドを実行します。

存在しなければ例外処理の方に進み、保存されているハイスコアには手を入れずそのまま値を返します。(一応Saveを入れてますがいらなかったかも)

Saveメソッドの中ではEasySave3に用意されているES3.Saveメソッドを用いて、”level1″という名前のキーにハイスコアを保存しています。

保存したハイスコアをUI上で表示

10個のハイスコアを保存してあるものの、レイアウトめんどくさい3個表示しておけば十分という判断をしました。
DescribeHighScoreメソッドで、渡されたハイスコアを頭から3つ、スコア表示用のオブジェクトに放り込んでいます。

できたのがこちら

1回目のプレイ結果である「21」というスコアが、2回目のプレイの結果時にも残っていることがわかります。

参考記事

コメントを残す

メールアドレスが公開されることはありません。