i-school - パズルゲーム 手順3
 ここからは、干支を自動で大量に生成し、それをつなげて消すまでのロジックを実装していきます。
手順3〜7で実装を順番に行っていきます。

 以下の内容で順番に実装を進めていきます。

 7.ゲーム管理用のGameManagerスクリプトを作成する 【5】のプレファブを自動生成させる(生成位置も設定する) 
 8.enum(列挙型)スクリプトを作成し、干支の名前を登録する
 9.干支の管理をするEtoスクリプトを作成して、【5】のプレファブにアタッチする



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

・MonoBehaviourを継承していないenumのみのスクリプトの作成【8】



 7.ゲーム管理用のGameManagerスクリプトを作成する 【5】のプレファブを自動生成させる(生成位置も設定する) 

 

干支の生成位置を設定する


 Canvas上で右クリックしてメニューを表示し、Create Empty を選択します。名前を EtoSetTran に変更します。
この位置から干支を生成するようにします。下記の画像のような位置に調整してください。

ヒエラルキーの画像


インスペクターの画像



GameManagerスクリプトを作成する


 Scriptsフォルダ内で右クリックしてメニューを表示し、Create => C# Scripts を選択します。名前をGameManagerに変更します。
GameManagerスクリプト・ファイルをダブルクリックして、スクリプトを記載してください。

GameManager.cs

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



GameManagerゲームオブジェクトを作成する


 スクリプトが完成したら、ヒエラルキー上にゲームオブジェクトを1つ作成します。

 ヒエラルキーのCanvasではない場所で右クリックしてメニューを表示し、Create Empty を選択します。名前をGameManagerに変更します。
このGameManagerゲームオブジェクトはCanvas内にある必要はありません。

ヒエラルキーの画像



 続いて、作成したGameManagerスクリプトを、このGameManagerゲームオブジェクトにドラッグアンドドロップしてアタッチします。
GameManagerゲームオブジェクトを選択して、インスペクターを確認します。GameDataスクリプトがアタッチされている場合、アサイン情報が3つ表示されています。
こちらに順次情報を登録します。

GameManagerのインスペクターの画像



 EtoPrefab 変数には、Project内のPrefabsフォルダにあるEtoPrefabをドラッグアンドドロップしてアサインします。

 EtoSetTran 変数には、先ほどCanvas内に作成したEtoSetTranゲームオブジェクトをヒエラルキーからドラッグアンドドロップしてアサインします。

アサイン動画
https://gyazo.com/60c1212cbf768eb1ee67dfb362a7eaeb

 MaxRotateAngle 変数は初期値がアサインされていますので、そのままでよければ変更しなくて問題ありません。

 MaxRange 変数と FallPos 変数も初期値がアサインされていますが、この部分はゲーム画面のサイズなどを考慮して調整してください。
端末によっては、左右をはみ出てしまったり、画面外から落下する干支が最初から見えてしまったりするためです。


完成 
インスペクターの画像



ゲームを実行して、干支が指定数だけ生成されるか確認する


 それでは早速、ゲームを実行してみましょう。EtoPrefabで設定している同じ絵柄の干支が、GameDataスクリプトで指定した数(基準値は40 〜 50個前後)だけ生成されて
ランダムな位置から落下を始めれば成功です。また干支の角度もランダムな値が入っているはずのですので、ヒエラルキーでも確認してみてください。
 

EtoPrefabの干支(こちらが指定した数生成されます)


実行動画
https://gyazo.com/534d5ab4df7b588d8192c15f2ac6276b


8.enum(列挙型)スクリプトを作成し、干支の名前を登録する


 干支の名前をその都度入力しているのでは手間が増えますし、打ち間違える危険性も上がります。
そこで干支の名前をenumにして事前に登録し、この値をゲーム内に利用するようにしましょう。

 enumは列挙型と呼ばれる機能で、ゲーム内に登場する情報を1つの枠組みを作り、その中に同じ種類の情報をまとめて登録しておくことが出来ます。
今回はEtoTypeという名前で、干支の種類12個を登録しておくようにしましょう。

 Scriptsフォルダ内で右クリックしてメニューを表示し、Create => C# Script を選択します。名前をEtoTypeにします。

EtoType.cs

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


 enum(列挙型)に登録される情報を列挙子といいます。ここでは、子、牛、などが列挙子に当たります。
今回は数が多いため = x で番号を書いていますが、列挙子には自動的に0番から順番に番号が割り当てられていますので、従来は書かなくても問題ありません。
見やすさを優先して記載しています。

<MonoBehaviourを継承していないenumのみのスクリプトの作成>


 enumのみを登録しているスクリプトの作成には、 MonoBehaviourクラスの継承は不要です。各種のusing宣言も不要になります。
MonoBehaviourを継承していませんのでゲームオブジェクトへのアタッチが不要になりますが、enumの修飾子の値はいずれのスクリプトからでも参照できる状態になります。
これがクラス内にenumを作成した場合と、1つのスクリプトとしてenumを作成した場合の差になります。

 クラスの中でのみ使用が限られているenumである場合にはクラス内の宣言フィールドにて作成し、
特定のクラスに限らず広く使う予定のあるenumについては、今回のように1つのスクリプトとしてenumを作成するようにしましょう。


テクニック <列挙子の最大値の取り方>


 最後にあるCountは、enumに登録されている種類の最大値を取得するために登録しています。配列などと違い、enumでは登録してある列挙子の数の情報を取得できません。
そのため、列挙子の一番最後に、このような列挙子を作成しておき、このCountをint型にキャストすることで、配列のように列挙子の最大値を取得できるようにしています。
Count = 12 という情報を利用するわけですね。他のenumでも利用できますので、必要に応じて活用してみてください。


9.干支の管理をするEtoスクリプトを作成して、【5】のプレファブにアタッチする

Etoスクリプトを作成する


 【7】の手順までで、無事に干支を大量に自動生成することが出来ました。
現在生成された干支はプレファブの情報をそのまま利用していますのですべての干支が同じ絵柄になってしまっています。
そのままではゲームになりませんので、干支のイメージや情報を変更する手順が必要です。

 このとき、干支のイメージを1つずつ変えて、12個のゲームオブジェクトを作成する必要はありません。

 最も効率よく、かつ間違いのない方法は、1つのEtoPrefabをプログラムによって干支の情報が自動で変更されるロジックを組み、それを実装することです。

 EtoPrefabのクローンを1つ生成する
    ↓
 生成されたクローンの干支のイメージを、12種類の干支の中から1種類をランダムで選択してその選ばれた干支のイメージにする

 このようなロジックを組むことができれば、あとはそれを50回繰り返すことで、ランダムな干支のイメージに書き換えることができます。
 すでに50個のEtoPrefabを生成することには成功していますので、あとは、このロジックを実現するためのスクリプトを設計していきましょう。

 EtoPrefabに現在までに登録しておきたい情報は、干支の種類(EtoType)と干支のイメージの変更先、の2つです。
この情報を扱うようにするために、Etoスクリプトを用意します。

 EtoPrefabに新しく作成したEtoスクリプトをアタッチすることで、生成されたタイミングで干支のイメージを差し替えて、
干支の種類や、プレファブの名前も、ランダムに選択された干支に変更するようにします。

Eto.cs

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



メソッドの引数について


 SetUpEtoメソッドの引数に注目してください。引数には型やクラスであれば指定ができますので、今回のようにEtoTypeというenumや、Spriteといった型も情報としてやり取りすることが可能です。
int型やstring型などが利用されることが多いため間違えやすいですが、先入観を持たずに、型であれば引数に指定できることを覚えておいてください。もちろん、GameObject型の指定も可能です。

 なお、C#における引数の最大値は65,536個です。今回のように2つの場合もあれば、もっと多くの引数を持つメソッドを作成することも可能です。


EtoPrefabにEtoスクリプトをアタッチして、インスペクターからアサイン情報を登録する


 スクリプトを作成できたら、EtoPrefabにこのスクリプトをドラッグアンドドロップしてアタッチします。
EtoPrefabを選択して、インスペクターから Open Prefab を選択します。ヒエラルキーがプレファブの編集モードに切り替わります。

 アサイン情報が2つありますが、EtoTypeの方は変更せずにおいてください。この値が生成時に自動的に変更されます。
(プルダウンメニューで12種類の干支が選択できるようになっていれば大丈夫です。)

 ImgEto 変数には、EtoPrefabのImageコンポーネントをドラッグアンドドロップしてアサインします。
このイメージ部分も、生成時に自動的に変更するようにしています。


アサイン動画
https://gyazo.com/e2ce318c00e4d3d779ab629291551dcf


EtoPrefab 完成画像




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

 次は 手順4 です。