Unityに関連する記事です

 複数回の手順に分けて、お使いの成果として褒賞を獲得できるようにします。今回が一連の手順の最後になります。

 この手順では抽選された褒賞のデータを褒賞表示用のポップアップに反映していく処理を実装します。
褒賞のデータにある画像のデータや、希少度などを、その都度、褒賞のデータに合わせてポップアップに表示させます。
 

<実装動画 ,使いの難易度(JobType)が Common の場合>
動画ファイルへのリンク


<実装動画◆,使いの難易度(JobType)が Normal の場合>
動画ファイルへのリンク


手順20 −ランダムで抽出した褒賞のデータを褒賞表示ポップアップに反映する処理の実装−
34.RewardPopUp スクリプトと OfflineTimeManager スクリプトを修正し、褒賞のデータを受け取ってポップアップ内に反映する処理と、完了したお使いのデータを削除する処理をそれぞれに実装する
35.GameManager スクリプトを修正し、抽出した褒賞のデータを褒賞確認ポップアップに渡す処理と、完了したお使いのデータを削除する処理を実行する処理を実装する



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

 ・実装パターンの応用 ー同じ処理を異なる方法で実行するー



34.RewardPopUp スクリプトと OfflineTimeManager スクリプトを修正し、褒賞のデータを受け取ってポップアップ内に反映する処理と、完了したお使いのデータを削除する処理をそれぞれに実装する

1.設計


 お使いが完了した際に生成されるキャラのゲームオブジェクトをタップすると、今回のお使いの成果として褒賞を獲得できるシステムを設計して実装します。
今回はお使いの難易度に応じた褒賞のデータをランダムで抽出する機能の設計と実装を行っていきます。

<褒賞獲得までの手順>
 〇獲得した褒賞の情報を表示してプレイヤーに伝えるための褒賞表示用ポップアップ・ゲームオブジェクトと、そのゲームオブジェクトを制御するスクリプト
 〇キャラをタップした際に、褒賞表示用のポップアップ・ゲームオブジェクトを生成する処理
 〇褒賞の内容を登録するためのデータベースの作成(今回の手順で作成)
 〇お使いの難易度に応じた褒賞のデータをランダムで抽出する機能
 ◆褒賞表示用ポップアップ・ゲームオブジェクトに、ランダムで抽出された褒賞のデータを送り込んで表示させる機能
 ◆セーブしてあるお使いのデータと、 OfflineTimeManager スクリプトの List 内から削除する機能

 残る2つの手順を実装します。

 確定した褒賞のデータを褒賞確認ポップアップ側に送り込む処理は、ポップアップの生成処理を行っている GameManager スクリプト内の処理を修正して実装します。
そのためにはまず、ポップアップ側のスクリプトに褒賞のデータを受け取れるようにしないとなりませんので、最初に、RewardPopUp スクリプトを修正します。
これは RewardPopUp スクリプトを作成する際にも説明した通りの設計になっていますので、復習しておいてください。

 セーブしてあるお使いのデータは OfflineTimeManager スクリプトの List にありますので、こちらの処理は OfflineTimeManager スクリプト内に
完了したお使いのデータを削除するメソッドを新しく用意し、そちらをキャラをタップした後のタイミングの処理について、すわなち、GameManager スクリプト内の処理を修正して実装します。
 
 お使いのデータは PlayerPrefasHelper クラスを利用してセーブも行っていますので、このタイミングで、このセーブデータの削除処理も合わせて
OfflineTimeManager スクリプトに新しく用意するメソッドに追加しておきます。

 ここまでで、長かった褒賞を取得してゲーム画面に内容をポップアップで表示するという一連の処理が完成します。

 処理の設計や組み立て方を復習し、自分でプログラムを書いていく際に参考にしてください。


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


 新しく変数の情報と、その変数を利用した処理を TODO 部分に実装していきます。
 前回までに実装が終了している変数は4と5のみですので、1〜3について変数を宣言してください。

<制御対象>
 1.txtRewardPoint ゲームオブジェクトの Text コンポーネント   → 褒賞のポイントを表示する

 2.txtRairity ゲームオブジェクトの Text コンポーネント     → 褒賞の希少度を表示する

 3.imgReward ゲームオブジェクトの Image コンポーネント     → 褒賞の画像を表示する

 4.btnSubmit ゲームオブジェクトの Button コンポーネント     → 確認用のボタンを押したときの制御をするため

 5.RewardPopUp ゲームオブジェクトの CanvasGroup コンポーネント → CanvasGroup コンポーネントの Alpha(透明度)を制御するため

 前回スクリプトを作成した際にも説明があったように、このスクリプトは「外部のスクリプトから呼び出し命令を受けて、ポップアップ内に表示する褒賞のデータを受け取って」
それを各コンポーネントに対して制御を行い、その都度、受け取った褒賞のデータを反映していく必要があります。

 現在は Start メソッドで実行しているこの SetUpRewardPopUp メソッドの呼び出しをコメントアウト(または削除)し、引数を追加して、外部のスクリプトから褒賞の情報を受け取れるようにします。
そして、その情報を各変数を利用して、ポップアップ内に反映していく処理を TODO 部分に実装を行います。

 イメージが沸いたら、まずは自分で処理の実装を行ってみてください。


RewardPopUp.cs

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


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


3.RewardPopUp ゲームオブジェクトの設定を行う


 Prefabs フォルダにある RewardPopUp ゲームオブジェクトのインスペクターを確認し、Open Prefab を選択します。
RewardPopUp スクリプト内に SerializeField 属性にて宣言している変数が3つ表示されていますので、
こちらに、RewardPopUp ゲームオブジェクト内から、必要な情報を持つゲームオブジェクトをアサインしてください。


インスペクター画像



 以上で設定は完了です。


4.OfflineTimeManager スクリプトを修正する


 お使いが完了した分のお使いのデータ(JobTimeData)を、管理している List より削除する処理をメソッドにて作成します。
このメソッドでは一緒に、このお使いのデータのセーブデータの削除も行うようにします。これで完了したお使いについては、データが完全にクリアになります。

 今後のデバッグを見越して、すべてのお使いのデータとお使いのセーブデータを削除するメソッドも用意しておきます。
お使いの数が増えた際のデバッグの際に活用してください。


OfflineTimeManager.cs

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


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

 これで処理をまとめたメソッドが完成しましたので、続いて、これらの処理を実行する処理を GameManager スクリプトを修正して実装します。


35.GameManager スクリプトを修正し、抽出した褒賞のデータを褒賞確認ポップアップに渡す処理と、完了したお使いのデータを削除する処理を実行する処理を実装する

1.設計


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

 褒賞確認ポップアップを生成している処理の部分を修正し、生成時に RewardPopUp スクリプトの情報を取得して、先ほど用意した
SetUpRewardPopUp メソッドを実行する処理に変更します。この際には前回の手順で取得している今回の褒賞の情報を引数で渡すようにします。

 また完了したお使いのデータを削除する処理を実行する処理を追加します。


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


 ポップアップの処理の修正方法は2パターン記述してあります。
 椨△諒法か、だけの方法になります。どちらも同じ処理になりますので、処理を読み解いて確認しておいてください。


GameManager.cs

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


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


3.<実装パターンの応用 ー同じ処理を異なる方法で実行するー>


 今回の Instantiate メソッドの部分の修正には2パターンの処理の実装方法を提示しています。

<褒賞表示用ポップアップ生成とメソッドの実行 
 // )賞のデータを作成したら、RewardPopUp スクリプトの制御を行うため、変数に代入する処理に変更する
 RewardPopUp rewardPopUp = Instantiate(rewardPopUpPrefab, canvasTran, false);
        
 // ∨賞のデータを作成したら、RewardPopUp スクリプトのメソッドを実行して、褒賞のデータを引数として渡す
 rewardPopUp.SetUpRewardPopUp(rewardData);

<褒賞表示用ポップアップ生成とメソッドの実行◆
 //  [ +△僚萢をかかない場合はこちらを1つで実装] 
 Instantiate(rewardPopUpPrefab, canvasTran, false).SetUpRewardPopUp(rewardData);

 処理の内容はどちらも同じです。Instantiate メソッドの戻り値として RewardPopUp クラスの情報を取得できるため、その情報を,任和綟し、それを利用して△離瓮愁奪票孫埆萢を行っています。

 このとき、Instantiate メソッド自体が戻り値の結果を持っているため、の処理も実装できるようになっています。
これは Instantiate メソッドで書かれているために分かりにくいですが、

 //  [ +△僚萢をかかない場合はこちらを1つで実装] 
 [ Instantiate(rewardPopUpPrefab, canvasTran, false) メソッドの戻り値の RewardPopUp ].SetUpRewardPopUp(rewardData);

 という処理になっているということになります。戻り値の処理である [ ] 部分をイメージして変換できるかが重要です。
メソッドの戻り値に注目して、色々な処理の書き方が出来る事を覚えておきましょう。

 特に今回のような、 で RewardPopUp クラスを変数に取得して利用する場合、その利用目的が△砲靴ないのであれば、わざわざ代入しなくてもの処理だけも問題ありません。
ですが、このメソッド内や、他のメソッドに引数として RewardPopUp クラスの情報を利用したい場合には、,諒法を使って変数に代入して何回も使いまわせるようにする必要があります。

 利用頻度や利用する場所に応じて、臨機応変な処理の記述を心がけてください。
そのためには、1つの処理にも複数の書式で対応できるように、色々な書き方や読み方を覚えていくことが大切です。

 なるべくたくさんのスクリプトを読み書きして、自分の引き出しを多くしておくことが応用力を生み出す源になります。


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


 Debug.Log メソッドを活用して、褒賞がランダムに抽選されるか確認は終了していますので、
この処理が実際に褒賞確認ポップアップ内に反映されるかを、お使いの難易度(JobType)を変更し、何回も試してみてください。
褒賞のデータベースであるスクリプタブル・オブジェクトのデータを変更して試してみることも大切です。


<実装動画 ,使いの難易度(JobType)が Common の場合>
動画ファイルへのリンク


<実装動画◆,使いの難易度(JobType)が Normal の場合>
動画ファイルへのリンク




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

 次は 手順21 ーユーザーのプレイデータをゲーム中に記録する機能の実装ー です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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