Unityに関連する記事です

干支の選択機能を追加する


 引き続き、干支の選択機能を実装していきます。この手順では、EtoSelectPopUpスクリプトの作成を行います。
合わせてGameManagerスクリプトとGameDataスクリプトの修正も行います。

 GameDataスクリプトのAwakeメソッドにてInitGameメソッドを呼び出していましたが、このInitGameメソッドを呼び出す処理をGameManageスクリプトに移行します。
またEtoSelectPopUpの初期設定を行う処理もGameManageスクリプトから呼び出すようにします。

 これにより、GameManagerスクリプト以外の各スクリプトからは、StartメソッドやAwakeメソッドがなくなりました。
そのため、ゲームの実行と同時に起動する処理がなくなったことになります。つまり、GameManagerスクリプト以外での処理はすべて明示的なメソッドの呼び出し命令によってのみ動きます。

 こうすることですべての処理の基底となる部分をGameManagerスクリプトに集約されて、処理の流れが一元化できます。
GameManagerスクリプトを確認すれば、処理の流れが追えるようになります。

GameManagerが順番に実行する

 1.GameDataクラスのInitGameメソッドを実行し、スコアなどを初期化する
 2.UIManagerクラスのInitializeメソッドを実行し、UIManagerを初期化する
 3.GameDataクラスに干支データが作成されているか確認し、作成されていない場合にはInitEtoDataListメソッドを実行し、干支データを作成する
 4.EtoSelectPopUpクラスのCreateEtoButtonsメソッドを実行し、干支ボタンを生成する

 処理の流れがクリアになりました。


 完成動画です。灰色になっている干支が選択されている干支になります。選択された干支+ランダム4種類の干支がゲーム内に生成されます。

https://gyazo.com/e91a216fbb2e336c846078ae18f25e97



 実装の手順です。
 1.EtoSelectPopUpスクリプトを作成する
 2.EtoSelectPopUpゲームオブジェクトにEtoSelectPopUpスクリプトをアタッチして、アサイン情報を登録する
 3.GameManagerスクリプトを修正する
 4.GameDataスクリプトを修正する



 新しく学習する内容になります。

・ListのFindメソッド処理


1.EtoSelectPopUpスクリプトを作成する


 EtoSelectPopUpスクリプトを作成します。このスクリプトでは、干支ボタンを生成したり、ゲームスタートを制御する処理をまとめておきます。


EtoSelectPopUp.cs

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



2.EtoSelectPopUpゲームオブジェクトにEtoSelectPopUpスクリプトをアタッチして、アサイン情報を登録する


 EtoSelectPopUpスクリプトが完成したら、先ほどの手順で作成したEtoSelectPopUpゲームオブジェクトにドラッグアンドドロップしてアタッチします。

 EtoSelectPopUpゲームオブジェクトのインスペクターを確認します。アサイン情報が3つ表示されています。
(EtoButtonの欄は次の手順が終了してからアサインを行いますので、いまはコメントアウトしておいて、もしも表示される場合にもアサインせずにおいてください。)


EtoButtonゲームオブジェクトのインスペクター画像 .▲汽ぅ鸛



 残りの3つの変数へのアサインを行います。

 EtoButtonTran 変数には、EtoSelectPopUpゲームオブジェクトの子オブジェクトである EtoButtonPlace ゲームオブジェクトをドラッグアンドドロップしてアサインします。

 btnStart 変数にも、同じくEtoSelectPopUpゲームオブジェクトの子オブジェクトである btnStart ゲームオブジェクトをドラッグアンドドロップしてアサインします。

 canvasGroup 変数はこのEtoSelectPopUpゲームオブジェクトにアタッチされている CanvasGroup コンポーネントをアサインします。
ヒエラルキーからドラッグアンドドロップしてもよいですし、CanvasGroup コンポーネントをそのままインスペクター上からドラッグアンドドロップしてもアサインできます。


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


 アサイン終了後のインスペクター画像です。これで一先ず、EtoSelectPopUpゲームオブジェクトは完成です。


EtoButtonゲームオブジェクトのインスペクター画像◆.▲汽ぅ鷂



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


 冒頭にも書きました通り、GameManagerスクリプトを修正して、StartメソッドからEtoSelectPopUpスクリプトとGameDataの各メソッドの呼び出しを追加します。

 また今までStartメソッドで自動的に処理を行っていたゲームの開始処理についても、専用のPreparateGameメソッドを用意して、そちらに処理を移行します。
干支の選択機能が追加されたため、ゲームは毎回自動的に始まる形式ではなく、EtoSelectPopUpゲームオブジェクトのスタートボタンが押されることによってのみ
ゲームを開始するように変更になったためです。そのスタートボタンに対応するメソッドとしてPreparateGameメソッドを用意しておきます。

 SetUpEtoTypesメソッドも修正して、干支の選択によって選択された干支1種類とランダムな4種類の干支を選択するようにします。  

 
GameManager.cs

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



<ListのFindメソッド処理>


 Listの持つメソッドの1つに、現在管理している要素を検索して対象の情報と照合を行う、 Findメソッドがあります。

    // 選択中の干支を探して生成する干支のリストに追加
    GameData.EtoData myEto = candidateEtoDataList.Find((x) => x.etoType == GameData.instance.selectedEtoData.etoType);

 左辺には、検索結果が代入されるための変数を用意しておきます。(Listが管理している型と同じ型の変数を宣言します。)
ここでは candidateEtoDataList に対してFindメソッドの処理を行うため、candidateEtoDataList の管理しているGameData.EtoData型を宣言します。

 Findメソッドの処理はラムダ型で記述します。
(x) => x.etoType 

 この部分は、candidateEtoDataList の要素(中身であるGameData.EtoData)を1つずつ順番に取り出して、そのEtoDataの管理するetoType を使って照合を行う、という処理です。
candidateEtoDataList には12種類の要素(干支データの数)がありますから、全部で12回、この取り出して照合を行ってくれます。x の値には、その都度、1つだけ EtoData が代入されるようになります。

x.etoType == GameData.instance.selectedEtoData.etoType

 この部分は、1つずつ取り出されてくる EtoDataのetoType と、GameDataが管理している selectedEtoDataのetoType が同じかどうか照合判定しています。
x.etoType とは、現在取り出されている EtoData(これが x に当たります)の持つ etoType を見ています。

 そして照合の結果、合致した値が見つかった場合には、その値を左辺へと戻してくれます。その時点で未検索の candidateEtoDataList の要素があっても処理が終了します。 



 GameManagerスクリプトの修正が終了したら、GameManagerゲームオブジェクトを選択し、GameManagerスクリプトをインスペクターを確認します。
アサイン情報に EtoSelectPopUp変数が追加されていますので、ヒエラルキーにあるEtoSelectPopUpゲームオブジェクトをドラッグアンドドロップしてアサインします。

GameManagerゲームオブジェクトのインスペクター画像



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


 GameManagerスクリプトのStartメソッドにInitGameメソッドの呼び出しを用意しました。
そのため、このスクリプト内でのInitGameメソッドの呼び出しを削除します。

 こうすることで常にGameManagerスクリプトが実行した順番で処理が実行できるようになります。

 また干支ボタンによって選択された干支の情報を、干支データとして管理するように、新しく selectedEtoData 変数を1つ追加します。
干支ボタンがタップされるたびにこの干支データが更新されるようにしておくことで、この干支データを利用して「選択した干支」という情報をゲーム内に反映することが可能になります。

 次の発展課題で使用する etoRate 変数もここで合わせて用意しておきます。(今はまだ使いません)


GameData.cs

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




 GameDataスクリプトの修正が終了したら、GameDataゲーオブジェクトを選択して、GameDataスクリプトのインスペクターを確認します。
アサイン情報が2つ追加されているはずです。

 selectedEtoData 変数はゲーム内で干支ボタンを押すたびに更新される値です。ここには EtoType と Sprite の項目がありますが、どちらも設定を変更しなくて問題ありません。

 etoRate 変数は後で使用しますので、初期値が 3 になっていれば、こちらも問題ありません。


GameDataゲーオブジェクトのインスペクター画像




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

 次は 発展7 です。

 干支ボタンを作成しプレファブ化して、そのプレファブをスクリプトから動的にボタンを生成するようにします。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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