i-school - 経験値テーブル機能の実装
 経験値テーブル機能を実装し、レベルの要素を追加実装できるように準備を行います。

 教材はあくまで実装例ですので、この方法だけがすべてではありませんので、学習後、どういった設計をすれば実装できるかを考えてみてください。



設計


 経験値テーブルについては、スクリプタブル・オブジェクトを作成して、各レベルと経験値の幅を1つのクラス情報として登録し、それを List で管理する設計にします。

 ステージシーンのゲーム画面に UI を配置して、レベルと Exp の表示を行えるようにしてから、UIManager スクリプトを修正して、制御を行うようにします。


ExpTable スクリプトを作成する




<= クリックすると開きます



ExpTableSO スクリプトを作成する



<= クリックすると開きます



ExpTableSO スクリプタブル・オブジェクトを作成し、設定を行う


 レベルは 1 からスタートがいいでしょう。
 現在のレベルの経験値の最大値と、次のレベルの最小値をおなじ値にする以外は制約はありません。
エネミーから獲得できる経験値と調整を行えますので、まずは自由に設定してみてください。


インスペクター画像



DataBaseManager スクリプトを修正する


 ExpTableSO スクリプタブル・オブジェクトを他のスクリプト内で利用できるように DataBaseManager クラスに変数を追加してアサインします。

 また、ExpTable クラスに設定したデータから、次のレベルに必要な経験値の値を取得するメソッドを合わせて実装します。


DataBaseManager.cs

<= クリックすると開きます



DataBaseManager ゲームオブジェクトの設定を行う


 Datas フォルダ内にある ExpTableSO スクリプタブル・オブジェクトをドラッグアンドドロップしてアサインしてください。
これで利用できる環境になりました。


インスペクター画像




Canvas ゲームオブジェクト内に経験値表示用のゲームオブジェクト群を作成する


 参考用の画像を掲載しますが、表示したい機能を自由に作成してください。
同じフォントを利用する場合、Text コンポーネントのアタッチされているゲームオブジェクトをプレファブにしておくことで利便性が高まります。

 合計3つのセットで構成されています。(Hp も加えると4つ)

完成時のヒエラルキー画像



完成時のScene ビュー画像



完成時の Game ビュー画像





 StatusSet   フォルダ役のゲームオブジェクト
  imgOutFrame  外枠のフレーム画像を設定する Image コンポーネントのアタッチされているゲームオブジェクト
    imgInFrame   内枠のフレーム画像を設定する Image コンポーネントのアタッチされているゲームオブジェクト

Scene ビュー画像





 LevelSet    フォルダ役のゲームオブジェクト
  btnLevel     背景の画像を設定する Image コンポーネントと Button コンポーネントのアタッチされているゲームオブジェクト
    txtLevel     現在の Level の数字を表示・更新する Text コンポーネントのアタッチされているゲームオブジェクト(プレファブ)

ヒエラルキー画像



Scene ビュー画像




 ExpSet
   lblExp     Exp と常時表示するラベル用の Text コンポーネントのアタッチされているゲームオブジェクト(プレファブ)
   txtExp     現在の Exp と目標の Exp の数字を表示・更新する Text コンポーネントのアタッチされているゲームオブジェクト(プレファブ)
   SliderExp  Exp の値を元にゲージをバー表示するための Slider コンポーネントのアタッチされているゲームオブジェクト群


ヒエラルキー画像



SliderExp ゲームオブジェクト インスペクター画像



Scene ビュー画像




UIManager スクリプトを修正する


 新しい変数の宣言を行い、制御したい情報をアサインできるようにします。
ゲームオブジェクトの名称と変数名を同じにしておくことにより、アサイン時に判別しやすくなります。
個人で開発する場合にも共同で開発する場合であっても役立ちます。些細なことの積み重ねが重要になりますので、心がけておきましょう。


UIManager.cs

<= クリックすると開きます


 スクリプトを修正したら、UIManager ゲームオブジェクトに、必要な情報を忘れずにアサインします。

 今回追加したメソッドのうち、最後のものは HP用の数字とゲージの表示更新用です。現在は未使用です。
コルーチンメソッドになっていますので、どのように処理が変わるかを実際に動かしてみて確認してみましょう

 また、スライダーの制御を行う DOValue メソッドには SetEase メソッドが設定されています。
Ease を変更してみるとスライダーのアニメが変化します。試してみましょう。

 最初は教材通りに動かしてみてどのような挙動になるかを理解し、その後、スクリプトを修正して、それがどのように変化するかを理解します
この繰り返しが非常に学習になりますので、理解を深めるためには書いて終わりではなく、次はどうしてみようか、という観点でスクリプトを見直すとよい学習に繋がります


ゲームを実行して動作を確認する


 UIManager スクリプトの Start メソッド内に各メソッドが動作する処理を実装しています。
この処理が動くことにより、ゲーム画面のレベル表示、Exp 表示が更新されることを確認します。

 今回活用した Start メソッドを利用したデバッグの方法は役立つ場面が多いですので、習得して有効活用してください。

 Exp のゲージについては、GameData クラスにある TotalExp 変数を次のレベルに必要な Exp 以下に設定することで確認することが出来ます。