Unityに関連する記事です

 獲得した褒賞を記録しているクラスがないため、新しくユーザーのプレイデータを記録するためのクラスを作成し、獲得した褒賞を記録できるようにします。
この機能を実装できると、この値をセーブ・ロードする機能を追加したり、それを元に獲得している褒賞をアルバム表示する機能なども実装出来ます。
 
 具体的には、新しく獲得した褒賞をリストに追加し、すでに獲得している褒賞の場合には数を増やします。
また、褒賞の持つポイント分だけ、ユーザーの合計ポイントの値を加算していく処理を実装します。

<実装動画 獲得した褒賞を種類ごとに分けてリスト追加し、ポイントを加算>
動画ファイルへのリンク


手順21 −ユーザーのプレイデータをゲーム中に記録する機能の実装−
36.GameData スクリプトを作成する
37.GameManager スクリプトを修正し、獲得した褒賞のデータを GameData に追加する処理を実装する



 新しい学習内容は、以下の通りです。

 ・シングルトンデザインパターンによるクラスの活用



36.GameData スクリプトを作成する

1.設計


 褒賞を獲得する処理は実装できました。しかし、その情報を記録しているクラスがないため、現在は内容的には獲得できていないのと同じ状態になっています。
ユーザーが獲得できた状態にするためには、新しくユーザーのプレイデータを記録するためのクラスを作成し、獲得した褒賞を記録できるようにします。

 全体の設計としては、この機能を実装できると、この値をセーブ・ロードする機能を追加したり、それを元に獲得している褒賞をアルバム表示する機能なども実装出来ます
それはすべてこの機能の実装が前提となっているためです。言い換えるなら、それらの機能を考えて実装するためには、事前の準備をどのようにするかを考えておく必要があるということにもなります。

 先を見通して、順番に処理を組み立てていくという設計デザインをイメージしてください
この流れは、OfflineTimeManager クラスを作成して、時間を記録できる状態にしてから、セーブ・ロードを行えるようにし、
その後、お使いのデータを反映させていった、今までの実装手順とほぼ同じ機能実装の流れになります。

 何回も設計とロジックを組み立てていくことによって、実装までの流れが把握できるようになりますので、繰り返し学習を行いましょう。
そして新しく1つの機能を実装できることで、その先の実装にもつながっていくことを理解していきましょう。

 少しずつ機能を作って組み立てていく、という言葉通りの内容になりますので、全体としてどのような機能が欲しいのか、
そのためには何を少しずつ足していけばいいのかを考えていくようにしてください。。
 


 今回の実装では、新しく作成するクラス内に、獲得した褒賞をリスト化して追加していきます。ここが「ユーザーデータを記録する」機能になります。
すでに獲得している褒賞の場合には、同じ褒賞を重複して登録はせずに、獲得数を1ずつ増やして対応します。このロジックを考えることが大切です。
イメージを膨らませて、どのようにすればいいかを書き出してみてください。

 また、褒賞にはポイントがあるため、獲得するたびに、その褒賞の持つポイント分だけ、ユーザーの合計ポイントの値を加算していく処理を実装します。
このポイントをどのように利用するかは任意です。お金のように何かを購入するようにしてもよいですし、経験値のように次のステージに進むための基準値にしてもいいでしょう。


2.GameData スクリプトを作成する


 新しいクラスを作成します。このクラスはシングルトンクラスとして作成します。そうすることで、どのクラスからでもユーザーのデータへのアクセスを容易にする目的があります。

 このクラスには入れ子としてもう1つの別のクラスを作成します。その入れ子クラスが実際にユーザーの褒賞のデータを記録するためのクラスになります。
このシングルトンクラスや、入れ子クラスを利用した設計は、OfflineTimeManager クラスとまったく同じ設計です。そちらも見直してみてください。
そして入れ子クラスを List にして利用しますので、運用方法も同じになります。

 変数には褒賞の獲得ポイントの合計値と、List を用意して、ユーザーの情報を管理する機能を実装します。
メソッドには、獲得した褒賞を List に追加・削除する機能と、獲得したポイントの計算処理を行う機能を、それぞれに役割ごとに分けてメソッド化して準備します。

 ここの準備が整えば、別のクラスから呼び出し命令を受けて、獲得した褒賞を List に登録して記録できるようになります。


GameData.cs

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


 スクリプトを作成したらセーブします。

 実装している処理の多くも、OfflineTimeManager クラスにおいて実装している内容を踏襲しています。
そのため、そちらの処理を参考にしながら復習をして、自分でしっかりと読み解けているかを確認してみてください。

 今回のメソッド内で実装している List を操作する各メソッド(Find メソッド、Exists メソッド、Add メソッド、Clear メソッド、Remove メソッド)については以前にも実装し、説明しています。
また、クラスを new キーワードを使用してインスタンスする処理も学習済です。よい機会ですので、しっかりと復習しておいてください。


3.GameData ゲームオブジェクトを作成し、GameData スクリプトをアタッチして設定を行う


 ヒエラルキーの空いている場所で右クリックをしてメニューを開き、Create Empty を選択します。
これは Canvas ゲームオブジェクト内に表示するゲームオブジェクトではないため、Canvas ゲームオブジェクトの子としては作成しないでください。

 新しく作成されたゲームオブジェクトの名前を GameData に変更します。

 先ほど作成した GameData スクリプトをドラッグアンドドロップしてアタッチしてください。
GameData ゲームオブジェクトのインスペクターを確認し、public 修飾子で宣言している2つの変数が表示されているか確認します。
どちらもゲーム内で値を代入するものなので、現在は確認のみで問題ありません。


インスペクター画像



 以上で設定は完了です。


37.GameManager スクリプトを修正し、獲得した褒賞のデータを GameData に追加する処理を実装する

1.設計


 今回も TODO 部分を実装して処理を組み立てていきます。先ほど GameData クラスに用意したそれぞれのメソッドを実行する処理を実装していくことになります。
まずは自分で、どの部分に、どの処理を書けば制御が成功するのか、考えて実装してみてください。


2.GameManager スクリプトを修正する


 TODO に処理を実装していきます。
GameData クラスはシングルトンクラスですので、変数を用意して代入しなくても、直接メソッドへの命令が可能です。

 褒賞を獲得したあとに、褒賞ごとのポイントの加算処理と、褒賞を List に追加する処理を実装することで、ユーザーが褒賞を獲得した状態を作り出します。


GameManager.cs

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


 スクリプトを修正したらセーブします。


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


 GameData ゲームオブジェクトをインスペクターを確認しながら作業を行いましょう。
何故ならば、ここに新しく追加されている2つの変数に対して処理の制御を行っているためです。
常にスクリプトの処理を把握して、どの部分が制御されるのかを確認していくことが大切です。

 処理の流れを見直したら、ゲームを実行してデバッグを行います。お使いを終了して褒賞を獲得してみてください。
GameData ゲームオブジェクトのインスペクターの褒賞のリストにデータが追加されて、その褒賞が持つポイント分が加算されれば制御成功です。

 ゲームを停止せずに、何回も処理を繰り替えてみてください。
ポイントの値がどんどんと加算されていき、リストにも褒賞が追加されていけば制御成功です。

 特に同じ褒賞を獲得した場合、リストには新しく追加されず、すでにある褒賞の数が加算されることを確認してください。
これは同じ褒賞を重複して獲得した際に制御する処理が入っているため、それが正常に動いているかを判断する必要があるからです。

 そのため、リストには褒賞の種類ごとに分けられて追加されていくことになります。


<実装動画 獲得した褒賞を種類ごとに分けてリスト追加し、ポイントを加算>
動画ファイルへのリンク



 以上でこの手順は終了です。

 次は 手順22 ーユーザーのプレイデータをセーブする機能の実装ー です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます