i-school - ステージ選択ボタン機能の実装
 選択可能なステージをスクロール機能を使ってボタン表示し、選択するとキャラがステージ上に移動する機能と
ステージ選択後に探索開始ボタンを押すと、選択しているステージの情報を参照した上でステージシーンへ遷移する機能を実装します。


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




設計


 シーン管理とボタン生成を行う World スクリプト、ステージ選択用のボタンにアタッチするスクリプトの2つを作成する
 ステージ選択用のボタンのゲームオブジェクトを作成し、それは Content ゲームオブジェクトの子オブジェクトとして生成する
 Content ゲームオブジェクトには GridLayoutGroup と Content Size Fitter がアタッチされているので、子オブジェクトにすることで、ScrollView 内にきれいにならぶ
 ボタンの制御(ステージ面、ステージの画像、ステージの番号など)を管理できるように、ボタン用のスクリプトを作成し、それを World スクリプトが Content の子オブジェクトとして生成するロジック
タワーディフェンスの、味方キャラの配置用のポップアップと同じような流れ
ボタンを押すと、GameData 内に選択したボタンに設定されているステージの番号を反映する。この値を使って、ステージを特定する(GameData 内に変数は用意済み)




Canvas




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



インスペクター画像






PlayerIcon




インスペクター画像



インスペクター画像




ScrollView















btnSubmit



インスペクター画像



インスペクター画像




btnStageSelectDetail



ヒエラルキー画像



構造




インスペクター画像



インスペクター画像



インスペクター画像



Sceneビュー画像




Gameビュー画像



StageSelectDetail スクリプト



StageSelectDetail.cs

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




アタッチ



インスペクター画像



プレファブの編集モード





World スクリプト



World.cs

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



World ゲームオブジェクト



ヒエラルキー画像



インスペクター画像



StageDataSO



StageDataSO.cs

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



インスペクター画像



DataBaseManager



DataBaseManager .cs

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








SceneStateManager スクリプトを修正する




SceneStateManager.cs

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



Stage スクリプトを修正する


 ステージシーンへ遷移した際、SceneStateManager に選択したステージの情報を管理させるようにします。
以前は SceneStateManager の stage 変数には、ヒエラルキーより Stage ゲームオブジェクト登録していましたが、
それは同じシーン内にお互いのゲームオブジェクトが存在していたので可能でした。

 今回からはステージ選択シーンのあとにステージシーンへ遷移するため、
SceneStateManager は前のシーンから継続して利用する状態になるため、シーン間のゲームオブジェクトのつながりがありません。
そのため、シーン遷移が完了したら、 Stage ゲームオブジェクトの Stage スクリプトの情報を取得する部分が必要になります。
この処理を Stage スクリプト側に用意して、SceneStateManager の stage 変数に代入するようにします。


Stage.cs

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