見出し画像

6-4BGMを鳴らす【Unityゲーム開発の基礎】作って学ぶブロック崩し

ブロック崩しを作りながらUnityを学んでいこう!
フェーズ1で「ブロック崩しの骨格」を作り
フェーズ2で「見た目をかっこよく」して
フェーズ3で「タイトル画面やゲームオーバーなどの画面」を作って
フェーズ4で「アニメーション」させて
フェーズ5で「ステージを増やす」ことができました。

フェーズ6の目標は「音を鳴らす」です。

今回はBGMです。
裏で音楽がなっているだけでグッとゲームっぽくなりますね。


AudioSourceコンポーネントを追加

効果音の時と同様に使うのは AudioSourceコンポーネントです。
効果音用のものとは別に、BGM用としてもう一つ AudioSourceを追加します。

MainManagerオブジェクトの Inspector からAudioSourceコンポーネントを追加します。BGMはループ再生された方がよいのでLoopにチェックを入れておきましょう。

AudioSource


スクリプトからAudioSourceコンポーネントにアクセスする時、GetComponentメソッドを使っていました。
オブジェクトに追加されたAudioSourceコンポーネントが1つの時は問題ないですが、複数追加したすべてを取得したい場合はGetComponentsメソッドを使うと配列で複数取得できます。

public class MainManagerBehaviour : MonoBehaviour
{
       :
       :
    private AudioSource[] audioSources;                  //←配列にして


    void Start()
    {
        audioSources = GetComponents<AudioSource>();     //←複数取得
            :
    }
}


音源を紐づけ

MainManagerBehaviourにBGM用のAudioClipをメンバ変数として追加します。

public class MainManagerBehaviour : MonoBehaviour
{
       :
       :
    public AudioClip gameTitleBGM;                 //←ココを追加 
    public AudioClip gameCompleteBGM;              //←ココを追加
    public AudioClip gamePlayBGM;                  //←ココを追加
       :
       :
}

Inspectorからこの変数にそれぞれ音源ファイルを紐づけます。


スクリプトで音を鳴らす

AudioSourceコンポーネントを配列で取得していますが、
1番目をSE用、2番目をBGM用として使用することにします。

public class MainManagerBehaviour : MonoBehaviour
{
    public void OnNewGameButtonClicked()
    {
           :
           :
        audioSources[0].PlayOneShot(gamePlayES);
        audioSources[1].Stop();
        audioSources[1].clip = gamePlayBGM;
        audioSources[1].Play();
    }

    public void OnNextStageButtonClicked()
    {
           :
           :
        audioSources[0].PlayOneShot(gamePlayES);
        audioSources[1].Stop();
        audioSources[1].clip = gamePlayBGM;
        audioSources[1].Play();
    }

    public void OnContinueButtonClicked()
    {
           :
           :
        audioSources[0].PlayOneShot(gamePlayES);
        audioSources[1].Stop();
        audioSources[1].clip = gamePlayBGM;
        audioSources[1].Play();
    }

    public void OnReturnToTitleButtonClicked()
    {
           :
           :
        audioSources[0].PlayOneShot(gamePlayES);
        audioSources[1].Stop();
        audioSources[1].clip = gameTitleBGM;
        audioSources[1].Play();
    }

    public void OnEnemyUnitDead()
    {
           :
           :
        audioSources[0].PlayOneShot(gameClearES);
        audioSources[1].Stop();
        audioSources[1].clip = gameTitleBGM;
        audioSources[1].Play();
    }

    public void OnBallLost()
    {
           :
           :
        audioSources[0].PlayOneShot(gameOverES);
        audioSources[1].Stop();
    }
}

BGMを鳴らす場合はAudioSourceのPlayを呼び出します。
複数の音源を場面に合わせて切り替えているのでStopを呼び出して停止させた後、音源を差し替えてからPlayを呼び出しています。


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?