技術ブログ

【Unity】複数の効果音をオブジェクト1つで管理する方法

前書き

ゲームの雰囲気作りに超大事な効果音ですが、ゲームの規模次第ではものすごい数のファイル数になり、それぞれにゲームオブジェクトやAudioSourceを準備していてはオブジェクト数がとんでも無いことになってしまいます。

そこで今回は1つのゲームオブジェクトとC#スクリプトで全てを管理して再生する方法を紹介します。

実装

「SePlay.cs」というC#ファイルを作り、以下のソースコードをコピー&ペーストしてください。

    //再生を管理する効果音たちをセットする変数
    [SerializeField]
    AudioClip[] audioClips;

    AudioSource audioSource;

    void Start()
    {
        //コンポーネント取得
        audioSource = GetComponent<AudioSource>();
    }

    //効果音を再生する
    public void Play(string seName)
    {
        switch (seName)
        {
            case "SE0":
                audioSource.PlayOneShot(audioClips[0]);
                break;
            case "SE1":
                audioSource.PlayOneShot(audioClips[1]);
                break;
            case "SE2":
                audioSource.PlayOneShot(audioClips[2]);
                break;
            //:
            //:
            //以下効果音の数だけ記述
        }
    }

そして作ったC#ファイルを「SePlayer」と名づけたゲームオブジェクトにアタッチしてください。
AudioClipsのSizeに管理したい効果音の数を入力するとAudioClipをセットできる欄が出現するのでそこに各効果音をセットします。セットしたら準備完了、効果音を呼びたいスクリプトに以下を記載したら再生できます。

//コンポーネントを取得
sePlay = GameObject.Find("SePlayer").GetComponent<SePlay>();

//効果音名を指定して再生
sePlay.Play("SE0");

実際は「SE0」などを羅列して使うのではなくて、実際の効果音名(「Damage」や「Attack」など)を使い分かりやすく準備しておくと良いと思います。

↓役に立ったらシェアしてね↓