i-school - 2D放置ゲーム 手順8
 先ほどの手順で行き先のゲームオブジェクトにお使いの情報を登録しました。
この手順では行き先をタップした際に表示される行き先確認用のポップアップに、行き先ごとに登録してあるお使いの情報を表示する機能を実装します。
 

<実装画像>



<実装動画>
動画ファイルへのリンク


手順8 −行き先確認ポップアップに行き先ごとのお使いの情報を表示する機能を実装−
14.JobsConfirmPopUp スクリプトを修正し、タップした行き先に応じたお使いの情報を、行き先確認ポップアップに自動的に反映して表示する
15.TapPointDetail スクリプトを修正し、行き先確認ポップアップでお使いするを選択した場合、行き先の画像をお使い中の画像に変更する処理を実装する



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

 ・ToString メソッド
 ・Instantiate メソッドの戻り値



14.JobsConfirmPopUp スクリプトを修正し、タップした行き先に応じたお使いの情報を、行き先確認ポップアップに自動的に反映して表示する

1.設計


 TapPointDetail スクリプトにお使いの情報が登録されました。
行き先確認ポップアップの表示内容も自動的にこの情報を表示するように機能と処理を追加します。

 この処理を実装していくためには、2つのスクリプト間の情報のやりとりが必要になります。

 ・TapPointDetail スクリプトの JobDataの情報を JobsConfirmPopUp スクリプトを利用できるようにする
 
 スクリプト間の情報はメソッドの引数を通じて受け渡すことが可能です。
今回のケースであれば、情報を受け取りたい側にメソッドを準備して、その引数として情報を受け取れるように作成します。
つまり、JobsConfirmPopUp スクリプト側に、このメソッドを作成しておきます。

 TapPointDetail スクリプト側では、行き先確認ポップアップを作成する際に、
いままでは生成処理のみでしたが、このタイミングで、JobsConfirmPopUp スクリプトを取得して、
そのスクリプトに準備されているメソッドを実行し、お使いの情報を渡すようにします。

 メソッドの引数の機能を利用することによって、外部のスクリプトより情報を受け取る、情報を渡す、という処理が実装出来ます。

 今回はこのロジックを活用して実装を行っていきます。


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


 JobsConfirmPopUpゲームオブジェクトに用意してあるゲームオブジェクトのコンポーネントを利用できる状態にします。
お使いの名前、お使いの時間、お使いの種類を表示するためのゲームオブジェクトと、そのゲームオブジェクトには Text コンポーネントがアタッチされていますので、
各 Textコンポーネントを代入して利用するための変数を用意します。

 Start メソッドを廃止し、代わりに、外部から呼び出すことができるように public 修飾子のメソッドに作り変えます。
また、このメソッドは TapPointDetail スクリプトから呼び出してもらうので、TapPointDetail スクリプトの情報を受け取れるように
引数も新しく追加をします。ここが情報を受け取る窓口の役割を持つようになります。

 Start メソッドの内容はそのままで問題ありません。そこに処理を追加します。

 追加する処理は、引数で受け取った情報を活用し、新しく作成した Text コンポーネントの変数に対して
それぞれの情報を代入してゲーム画面に表示させる処理を記述します。Text コンポーネントの text プロパティの型は string 型です。
お使いの名前以外の変数の型は string 型ではないため、それぞれ ToString メソッドを活用して型を string 型に変換して表示させるようにします。

 イコールで記述する代入処理は常に左右の型の情報が同じである必要があります。


JobsComfirmPopUp.cs

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


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

 コメントを自分で書いて補記しておきましょう。
もしもコメントが書けない場合には、処理の内容をしっかりと把握できるように復習を行ってください。


3.<ToString メソッド>


 ゲーム画面に文字列を表示するために利用する Text コンポーネントの text プロパティは string 型です。
そのため、代入処理を行うためには、右辺に用意する情報も string 型である必要があります。

 例えば、整数や小数は string 型ではなく、int 型、float 型です。そのため、そのままの状態では代入処理を行うことが出来ません、
このときに利用しているのが ToString メソッドになります。

 ToString メソッドを実行することで、その前にある変数の型を string 型へと型変換する処理が行われます。
型を変換する処理のことをキャストといいます。



 距離の計算は小数点付で計算されています。このときこの値をそのまま画面に表示すると、小数点が非常に多く見にくくなってしまいます。
そのような場合には、ToStringメソッドの引数を利用して表示する値を整数のみ、あるいは指定した小数点の位までにします。

txtDistance.text = distance.ToString("F2");

 ToString()メソッドの引数に "F2" が指定されています。このメソッドは引数に指定した文字列によって表示方法を変化させることができます。
今回の F2 では、小数点第2位までを表示するように指定して、int型をstring型にする処理を行っています。
F の後ろの数字が小数点の位を指定しており、F0 の場合には少数点なし、F1 の場合には小数点第1位まで表示、というように表示方法の指定が可能です。

 実際にいろいろな値にして小数点表示を試してみましょう。

 enum は ToString メソッドを利用することで、列挙子を同名の文字列へとキャスト(型の変換処理)可能です。



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


 Prefabs フォルダにある JobsConfirmPopUp ゲームオブジェクトを選択して、インスペクターの一番上にある Open Prefab ボタンを押してプレファブ編集モードに切り替えます。

 JobsConfirmPopUp スクリプトを確認し、新しく SerializeField 属性にて宣言している変数が3つ表示されていますので、
こちらに適宜なゲームオブジェクトをドラッグアンドドロップしてアサインしてください。
プレファブ編集モードでアサインできる情報は、そのプレファブ内のゲームオブジェクトか、他のプレファブのゲームオブジェクトのみになります。


インスペクター画像



 以上で設定は完了です。


15.TapPointDetail スクリプトを修正し、行き先確認ポップアップでお使いするを選択した場合、行き先の画像をお使い中の画像に変更する処理を実装する

1.設計


 メソッドを準備できたら、次はそのメソッドを実行する処理を記述します。
TapPointDetail スクリプトに、JobsConfirmPopUp スクリプトに作成した OpenPopUp メソッドを実行する処理を追加します。

 これでロジックが完成します。

 処理を考えていく場合には、処理の終わりを見定めて、そちらから処理の最初に戻っていくようにすると、実装しやすくなります。


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


 Instantiate メソッドにて JobsConfirmPopUp ゲームオブジェクトのクローンを生成している部分を修正します。
そのままインスタンスだけしてしまうと、このスクリプトから JobsConfirmPopUpゲームオブジェクト を操作する手段がなくなってしまいます。
そのため、インスタンスと同時に、Instantiate メソッドの戻り値を代入するための変数を左辺に用意しておくことで、
その変数を通じて、JobsConfirmPopUp ゲームオブジェクトの制御を行える状態を作り出します

 今回制御を行いたいのは、JobsConfirmPopUp ゲームオブジェクト本体ではなく、このゲームオブジェクトにアタッチされている
JobsConfirmPopUp スクリプトになります。そのため、変数に代入されているゲームオブジェクトの情報を活用して
GetComponent メソッドを実行して JobsConfirmPopUp スクリプトを取得し、その上で OpenPopUp メソッドを実行します。

 注意したいのは、メソッドを実行するためには、そのメソッドがあるスクリプトの情報が必要になるということです。
ゲームオブジェクトの情報だけではメソッドを実行することは出来ないので、GetComponent メソッドを利用してスクリプトの情報を取得しています。


TapPointDetail.cs


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

3.<Instantiate メソッドの戻り値>


 Instantiate(インスタンシエイト)メソッドは、オブジェクトを元にクローンのゲームオブジェクトを生成するための命令です。
この命令を実行することによって、プレファブ状態の行き先確認ポップアップのクローンをゲームオブジェクトとして生成しています。
Unity公式スクリプトリファレンス
Object.Instantiate
https://docs.unity3d.com/ja/2018.4/ScriptReference...

 // 行き先確認用のポップアップ表示
  GameObject jobsComfirmPopUp = Instantiate(jobsComfirmPopUpPrefab, canvasTran, false);

参考サイト
@Tecah様
オブジェクト生成の仕方 Instantiate
https://qiita.com/Teach/items/c28b4fe5ca8dc4c83e26
Samurai Blog様
【Unity入門】Instantiateを使いこなそう!使い方・使用例まとめ!
https://www.sejuku.net/blog/48180



 Instantiateメソッドには、第1引数に指定した同じ型の戻り値があります。

 今回の処理では第1引数に jobsConfirmPopUpPrefab 変数を指定しています。この変数の型は GameObject 型です。
よって Instantiate メソッドを実行すると、生成した jobsConfirmPopUp ゲームオブジェクトの情報を GameObject 型の戻り値として取得することが出来ます。

 そのため、Instantiate メソッドを実行する際には、左辺に戻り値と同じ型の変数を用意しておくことで、
生成したゲームオブジェクトの情報を左辺へ用意してある変数へと代入処理を行うことが出来ます。
代入処理は、左辺 = 右辺 という条件でなければ成立しませんので、両辺が同じ型である必要があります。

 // 行き先確認用のポップアップ表示
  GameObject jobsComfirmPopUp = Instantiate(jobsComfirmPopUpPrefab, canvasTran, false);

 この処理を型で見てみると、次のようになります

  GameObject = GameObject(Instantiate メソッドの戻り値の型)

 左辺で用意している変数は GameObject型であり、Instantiateメソッドの戻り値の型も GameObject型 です。
以上の事からこの代入処理が成立して、jobsComfirmPopUp 変数の中には生成されたばかりの JobsComfirmPopUp ゲームオブジェクトの情報が代入されます


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


 すべての実装が終了したらセーブを行い、どのような処理を実装し、どのように動けば正常なのかを把握してから、ゲームを実行します。


<実行動画>
動画ファイルへのリンク



 以上でこの手順は終了です。
 
 次は 手順9 −行き先確認ポップアップでお使いを開始する処理と一定時間後にお使いを完了する処理を実装− です。