そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】効果音を複数使用したい場合の2つの設定方法

環境

Unity 2019.3.7f1

はじめに

2つ以上の効果音を使用したい時の設定方法です。

基本の記事の応用になります。
音の基本の記事はこちらです。
marumaro7.hatenablog.com



2つの設定方法

設定方法の決定方法は、
音のボリュームやピッチの「詳細設定が共通であるか」で決めます。

AudioSourceコンポーネントでいうこの設定値たちです。
image.png

・設定値が共通の場合
複数のAudioClipに対し、1つのAudioSourceコンポーネントを用意する方法
メリット:AudioSourceの用意は1つで済む
デメリット:個別で音の調整が必要な場合、設定が面倒(スクリプトからいちいち設定変更しないといけない)

・設定値が効果音ごとに異なる場合
1つのAudioClipに対し、1つのAudioSourceコンポーネントを用意する方法
メリット:個別で音の調整が事前に可能。
デメリット:AudioSourceを効果音の数だけ用意する必要がある。
無料の効果音を集めていくとそれぞれ音量が違うので私はこちらの方法で設定しています。


具体例

・設定値が共通の場合

複数のAudioClipに対し、1つのAudioSourceコンポーネントを用意します。

以下、3つのAudioClipを使用する例です。 スクリプトは次のように書きます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test4 : MonoBehaviour
{
    [SerializeField] private AudioSource a;//AudioSource型の変数aを宣言 使用するAudioSourceコンポーネントをアタッチ必要

    [SerializeField] private AudioClip b1;//AudioClip型の変数b1を宣言 使用するAudioClipをアタッチ必要
    [SerializeField] private AudioClip b2;//AudioClip型の変数b2を宣言 使用するAudioClipをアタッチ必要 
    [SerializeField] private AudioClip b3;//AudioClip型の変数b3を宣言 使用するAudioClipをアタッチ必要 

    //自作の関数1
    public void SE1()
    {
        a.PlayOneShot(b1);
    }

    //自作の関数2
    public void SE2()
    {
        a.PlayOneShot(b2);
    }

    //自作の関数3
    public void SE3()
    {
        a.PlayOneShot(b3);
    }
}



対応するAudioSourceとAudioClipをアタッチ。
自作の関数をボタンや、特定のタイミングで呼び出して使用します。
(b1~b3は適当に効果音割り付けただけです~)
image.png



・設定値が効果音ごとに異なる場合

1つのAudioClipに対し、1つのAudioSourceコンポーネントを用意します。

3つのAudioClipを使用する例です。
効果音別で設定値を変更したいため、3つのAudioSourceを用意します。
スクリプトは次のように書きます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test4 : MonoBehaviour
{
    [SerializeField] private AudioSource a1;//AudioSource型の変数a1を宣言 使用するAudioSourceコンポーネントをアタッチ必要
    [SerializeField] private AudioSource a2;//AudioSource型の変数a2を宣言 使用するAudioSourceコンポーネントをアタッチ必要
    [SerializeField] private AudioSource a3;//AudioSource型の変数a3を宣言 使用するAudioSourceコンポーネントをアタッチ必要

    [SerializeField] private AudioClip b1;//AudioClip型の変数b1を宣言 使用するAudioClipをアタッチ必要
    [SerializeField] private AudioClip b2;//AudioClip型の変数b2を宣言 使用するAudioClipをアタッチ必要 
    [SerializeField] private AudioClip b3;//AudioClip型の変数b3を宣言 使用するAudioClipをアタッチ必要 

    //自作の関数1
    public void SE1()
    {
        a1.PlayOneShot(b1);//a1にアタッチしたAudioSourceの設定値でb1にアタッチした効果音を再生
    }

    //自作の関数2
    public void SE2()
    {
        a2.PlayOneShot(b2);//a2にアタッチしたAudioSourceの設定値でb2にアタッチした効果音を再生
    }

    //自作の関数3
    public void SE3()
    {
        a3.PlayOneShot(b3);//a3にアタッチしたAudioSourceの設定値でb3にアタッチした効果音を再生
    }
}


image.png
対応するAudioSourceとAudioClipをアタッチ。
AudioSourceの設定を個別で変更することで細かい調整を行うことができます。

おわりに

もっと良いやり方があれば教えてください。