【Unity】一つのAudioSourceから複数の音源を流す方法

複数の音源を流す方法 Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「AudioSourceから複数の音源を流したい!」

「AudioSourceは音源を一つしか流せないの?」

というお悩みの方に向けた内容となっています。

Unityで音を流す際は、AudioSourceコンポーネントを使って流すことができます。

このAudioSourceコンポーネントに、通常はインポートした音声データのAudio Clipを紐づけて音を流しますが、インスペクターウィンドウからは一つのAudio Clipしか登録することができません。

そのため、AudioSourceから複数の音源を流す場合は、スクリプトを使って音を出し分ける仕組みを作っていく必要があります。

そこで、このページでは、UnityでAudioSourceコンポーネントから複数の音源を流す方法についてまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

一つのAudioSourceから複数の音源を流す場合

一つのAudioSourceから複数の音源を流すためには、

と、AudioClip用の変数を作っておくことで、スクリプトから複数の音源を流す処理が作れるようになります。

ここでは、2つの音をマウスの右クリックと左クリックで出し分ける方法を紹介していきます。

AudioSourceコンポーネントを準備する

まずは、音源を流すためにAudioSourceコンポーネントを準備しましょう。

AudioSourceを付けるためには、オブジェクトを選択してインスペクターウィンドウの「Add Component」をクリックして、

「Audio」の中にある「AudioSource」を選択します。

今回は、音源をセットするAudioResourceはスクリプトから選択するため未設定のまま、またゲーム実行とともに音が流れる必要が無いため、Play On Awakeのチェックは外しています。

なお、AudioSourceコンポーネントやUnityで音を出す方法については、以下の記事で詳しく解説しています。

複数のAudioClip用の変数を準備する

次に、オブジェクトに紐づけたスクリプト内に処理を書いていきましょう。

using UnityEngine;

public class SoundController : MonoBehaviour
{
    public AudioClip leftSound;
    public AudioClip rightSound;
}

5,6行目で2つのAudioClip用の変数を宣言して、どちらもpublic修飾子を付けておきます。

AudioClipは、Unityで音を使う際のデータ形式になっていて、この変数の中に音源データを入れていきます。

インスペクターウィンドウに戻ってオブジェクトを選択して、先ほど作った変数を探します。

変数の中に、Unityにインポートした音楽ファイルをアセットフォルダからドラッグ&ドロップで入れていきます。

これで、2つの変数の中に音楽ファイルを入れることができました。

AudioSourceコンポーネントを取得する

次に、AudioSourceコンポーネントを取得して音を再生できるようにしておきましょう。

using UnityEngine;

public class SoundController : MonoBehaviour
{
    public AudioClip leftSound;
    public AudioClip rightSound;
    AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();  // AudioSourceを取得
    }
}

11行目でGetComponentメソッドを使って、AudioSourceコンポーネントを「audioSource」の変数の中で取得しています。

このGetComponentメソッドは、コンポーネントを取得することができるメソッドで、後ろにコンポーネント名を書いて使います。

GetComponent<コンポーネント名>()

スクリプトに複数の音源を流す処理を加える

ここまでできたら、スクリプト内でマウスの左クリックと右クリックに合わせて、それぞれの音源が流れるように設定していきます。

using UnityEngine;

public class SoundController : MonoBehaviour
{
    public AudioClip leftSound;
    public AudioClip rightSound;
    AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    void Update()
    {
        // 左クリックの場合
        if (Input.GetMouseButtonDown(0))
        {
            audioSource.PlayOneShot(leftSound);     // leftSoundの音源を流す
        }

        //右クリックの場合
        if (Input.GetMouseButtonDown(1))
        {
            audioSource.PlayOneShot(rightSound);    // rightSoundの音源を流す
        }
    }
}

マウスのクリックは、InputクラスのGetMouseButtonメソッドを使うことで検知することができるので、それぞれ17行目と23行目でif文を使って条件指定しています。

そして、音源を再生するためにAudioSourceコンポーネントにあるPlayOneShotメソッドを19行目と25行目で使っています。

このPlayOneShotメソッドは、引数にAudioClipを渡してあげることで、その音楽ファイルを再生してくれます。(第二引数は省略可能)

AudioSource.PlayOneShot(音源のclipデータ, 音量の倍率);

これで、実際にゲームを実行してマウスをクリックしてみると、右クリックと左クリックで異なる音が流れて、一つのAudioSourceから複数の音源を流すことができるようになりました。

なお、PlayOneShotメソッドは、通常の音楽を流すPlayメソッドと異なり、複数の音声を重ねて流すことができるようになっています。

まとめ

このページでは、Unityで音を流すAudioSourceコンポーネントについて、一つのAudioSourceから複数の音源を流す方法を紹介しましたが、いかがでしたでしょうか?

AudioSourceコンポーネントは、基本的に音楽ファイルを一つしか登録することができません。

そのため、一つのAudioSourceから複数の音源を流す場合は、スクリプトから処理を行う必要があります。

AudioClip型の変数を音源の数だけ準備しておくことで、それぞれのタイミングに合わせて音源を変えて流すことができるようになります。

最後までお読みいただきまして、ありがとうございました!

コメント