Unityに関連する記事です

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

16.GameDataスクリプトを修正する .好灰△半辰靴心鎧戮凌瑤鯏佻燭靴憧浜できるようにする
17.UI管理を行うUIManagerスクリプトを作成する(スコア表示の更新)
18.GameManagerスクリプトを修正するァ.好灰△半辰靴心鎧戮凌瑤魏短擦垢觸萢を追加する



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

・メソッド内で別のクラスのメソッドの呼び出しを行う



16.GameDataスクリプトを修正する .好灰◆奮容世靴薪誠堯砲抜鎧戮鮠辰靴真瑤鯏佻燭靴憧浜できるようにする


 GameDataスクリプトを修正して、スコアと消した干支の数を変数で管理できるようにします。
また干支を消した際の点数も登録できるように変数を用意します。public 修飾子で変数を宣言して、インスペクターから設定ができるようにしておきましょう。


GameData.cs

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




 InitGameメソッドを新しく作成し、ゲームの初期化を行っています。


 スクリプトを修正をしたら、GameDataゲームオブジェクトのインスペクターを確認します。今回追加したpublic修飾子の変数が3つ追加されています。
Score変数とEraseEtoCount変数はゲーム中に加算される変数ですので、0のままにしておいてください。

GameDataのインスペクター画像



 EtoPoint変数は、干支を1つ消したときにスコアとして加算される点数の値になります。こちらは設定をお願いします。初期値は100ですが、任意の値に調整してください。
干支は3つ以上で消えますので、例えば干支を4つ消すと、 4 * 100 です。Score変数には 400 という値が加算され、EraseEtoCount変数には 4 が加算されます。


17.UI管理を行うUIManagerスクリプトを作成する(点数表示の更新)


 UIの表示や更新、管理に関しては一手に担っていただけるように管理クラスを1つ作成します。まずはスコアの更新処理を行わせます。

 Project内のScriptsフォルダ内で右クリックをして、Create => C# Script を選択し、名前をUIManagerに変更します。スクリプトを書いていきましょう。

UIManager.cs

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



UIManagerゲームオブジェクトを作成してUIManagerスクリプトをアタッチする


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

ヒエラルキーの画像



 作成したUIManagerゲームオブジェクトをヒエラルキーで選択し、インスペクターを確認します。
SerializeField属性で宣言しているtxtScore変数がアサインできるようになっていますので、Canvas内のtxtScoreゲームオブジェクトをドラッグアンドドロップしてアサインします。

アサインするTextコンポーネントを持つゲームオブジェクト


アサイン後のインスペクターの画像



18.GameManagerスクリプトを修正するァ.好灰△半辰靴心鎧戮凌瑤魏短擦垢觸萢を追加する


 GameMamagerスクリプトの修正を行い、OnEndDragメソッド内に、スコアと消した干支の数を加算する処理を追加します。
また、UIManagerのUpdateDisplayScoreメソッドを呼び出して、画面のスコア情報の更新を行わせます。

 スコアの加算に関する処理の流れは、次のようになります。

1.干支を消す
   ↓
2.GameManagerのOnEndDragメソッドの処理の中で、同じGameManager内にあるAddScoreメソッドが呼び出される
   ↓
3.AddScoreメソッドの処理の中でGameDataで管理しているScore変数とEraseEtoCount変数の加算処理を行う
   ↓
4.AddScoreメソッドの処理の中でUIManagerにあるUpdateDisplayScoreメソッドが呼び出される
   ↓
5.UIManagerのUpdateDisplayScoreメソッドの処理の中でScoreを表示しているTextコンポーネントに対して処理を行い、画面表示をGameDataのScoreの値にする


<メソッド内で別のクラスのメソッドの呼び出しを行う>


 スクリプトを利用すると、自スクリプトに用意しているメソッドだけではなく、他のスクリプトに用意しているメソッドを呼び出して命令を行うことができます。
そのためには、呼び出されるメソッドがpublic 修飾子で用意されていることと、呼び出したいメソッドを管理しているスクリプトへの紐づけ(変数への代入や一時的な取得)が必要になります。

 スコアの加算についてはGameManagerクラス内において処理を行っていますが、それをゲーム画面の表示へ反映する処理は別のクラス(UIManager)のメソッドが処理を行う仕組みです。
処理する回数が少なければ一時的に紐づけを取得すればよいですが、スコアの更新はゲーム内に何回も頻繁に行われる処理になりますので、宣言フィールドに変数を用意して、そこでUIManagerクラスへの紐づけを用意します。

 UIManagerクラスもGameManagerクラスもゲームオブジェクトとしてヒエラルキーに存在していますので、こういった場合にはゲーム実行後にスクリプト内で取得する以外にも
SerializeField属性の変数を用意して、インスペクターから事前にアサインしておくことで、紐づけした状態でゲームを開始することができます。


 
GameManager.cs

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




 GameManagerスクリプトの修正が終わったら、ヒエラルキーのGameManagerゲームオブジェクトを選択してインスペクターを確認します。
SerializeField属性で宣言したUIManager変数のアサインが可能になっていますので、同じくヒエラルキーにあるUIManagerゲームオブジェクトをドラッグアンドドロップしてアサインします。

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



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


 ゲームを実行して干支を消してみましょう。画面に表示されているスコアの値が更新されていけば正常な動作をしています。

 もしも処理がうまく動作しない場合には、どこに問題があるか切り分けて、順番に考えていきます。

・GameDataのScore変数の値が更新されない
   ↓
    OnEndDragメソッドの中でAddScoreメソッドが呼びだされているか、AddScoreメソッド内でのGameDataのScore変数への加算処理が抜けていないか、など。

・Score変数の値は更新されているが、画面の表示に反映されない
   ↓
    AddScoreメソッドでの呼び出しがないか、UpdateDisplayScoreメソッドの処理に問題があるか、Textコンポーネントへのアサインができていないか、など。

 このように、どこに問題がありそうかを順番に特定していきましょう。そうすることで、処理の流れが分かるとともに、どこまで正常な処理が動いているかを確認できますので、問題点へ到達しやすくなります。



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

 次は 手順10 です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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