Unityに関連する記事です

 この手順では、ゲームクリア時とゲームオーバー時の際にBGMを切り替える処理を実装します。


手順27 ーBGMの制御処理の実装◆
46.スクリプトを使って、シーンに合わせてBGMを自動的に切り替える制御処理を実装する



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

・自分で設計した内容で実装を行う
・プレファブのゲームオブジェクトに、ヒエラルキーにあるゲームオブジェクトのアサイン情報を取得する方法の実装例



1.設計


 ここで紹介する手順は実装例の1つです。まずは自分で考えた設計を元に、実装を行ってみましょう。

 実装例では、2つの方法でBGMを切り替える処理を実装しています。

 ゲームクリアの場合には、ゴール地点を生成した際に、GoalChecker スクリプトに用意した新しく用意した SetUpGoalChecker メソッドを呼び出して
GameDirector スクリプトの情報を渡しています。プレファブのゲームオブジェクトをクローンする場合、ヒエラルキーにあるゲームオブジェクトの情報はアサインが行えません。
そのため、クローン生成後に、必要な情報を取得する必要があります。今回は生成に合わせて、必要な情報をメソッドの引数として受け取り、アサインを行うように設計しています。
これにより、ヒエラルキーにあるゲームオブジェクトを探して、GetComponent処理を行うという2つの処理を省くことが可能です。

 ゲームオーバーの場合には、ゲームオーバーの処理を行う GameOverZone スクリプトに AudioManager スクリプトの情報を紐づけして
ゲームオーバーの判定が行われた際に、BGMの切り替える処理を行うように実装しています。


2.GameDirector スクリプトにBGMを切り替える処理を追加する


 GoalClear メソッドを追加し、ゴール地点に設置しているクリア判定を通過した際に、BGMの切り替えの処理を実装します。

 また GenerateGoal メソッド内で生成したゴール地点のゲームオブジェクトにアタッチされている GoalChecker スクリプトの SetUpGoalHouse メソッドを実行して
GameDirector の情報を渡しています。これにより、GoalChecker スクリプトに用意した GameDirector の変数にアサインが行えます。


GameDirector.cs

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



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


 OnTriggerEnter2D メソッド内に処理を追加して、GameDirector スクリプトに用意した GoalClear メソッドを呼び出します。


GoalChecker.cs

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



4.GameDirector スクリプトの GenerateGoal メソッド内のコメントアウトを解除する


 コメントアウトしておいた処理のコメントアウトを解除します。


GameDirector.cs
    /// <summary>
    /// ゴール地点の生成
    /// </summary>
    private void GenerateGoal() {
        // ゴール地点を生成
        GoalChecker goalHouse = Instantiate(goalHousePrefab);


////* ここから追加 *////

        // ゴール地点の初期設定
        goalHouse.SetUpGoalHouse(this);         // <= コメントアウトを解除

////* ここまで *////

    }


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


 ゲームを実行して、BGMが正常に切り替わるか確認を行います。
ゴール地点のクリア判定を通過した際に、BGMが main から result にクロスフェード処理を行いながら切り替われば成功です。

 続いて、ゲームオーバー時のBGMの切り替え処理も実装を行います。


6.GameOverZone スクリプトを修正する


 AudioManager スクリプトの変数を宣言して、変数から扱える状態にします。
ゲームクリアの際と同じように、OnTriggerEnter2D メソッド内に処理を追加して、ゲームオーバーの判定が行われたら
BGMの切り替えを行うように処理を実装します。
 

GameOverZone.cs

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



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


 スクリプトの修正を行ったら、ヒエラルキーにある GameOverZone ゲームオブジェクトを選択して、インスペクターを確認します。
新しく宣言した AudioManager 変数が追加表示されていますので、ヒエラルキーにある AudioManager ゲームオブジェクトを選択して
ドラッグアンドドロップしてアサインしてください。


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



<手順動画 アサイン>
https://gyazo.com/2f03fb7c569bbd46b563cc1bd4173a69


GameOverZone ゲームオブジェクト アサイン後のインスペクター画像



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


 ゲームを実行して、ゲームオーバーになってみてください。
画面にゲームオーバーの表示が出た際にBGMの切り替え処理が行われていれば成功です。


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

 次は 手順28 ーオブジェクトと接触時のSEとエフェクト処理の実装ー です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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