遊テックプログラミング教室

プログラミングノートNOTE

Unityで複数の効果音を鳴らす

概要

Unityで複数の効果音を鳴らす方法について紹介します。

効果音の数だけ、AudioSourceコンポーネントをゲームオブジェクトにアタッチする方法が便利です。

この方法にすれば、音量等をそれぞれ異なる値に設定したい時に、インスペクターから各AudioSourceコンポーネントのプロパティを直接調整することが出来ます。

 

音源の用意

まず音源を用意します。フリー素材サイトの音人さん等からダウンロードしましょう。

Unityでは、mp3,wav,oggなどのファイルが使えます。

ここでは、ItemGet.wavというファイルと、Bakuhatu.mp3というファイルを使います。

音源ファイルの取り込み

UnityのプロジェクトウィンドウのAssetsフォルダ内にエクスプローラーやFinderからドラッグ&ドロップして音源ファイルを取り込みます。

(必要に応じて、Soundsなどのフォルダを作成し、そこに移動してファイルを整理しましょう)

AudioSourceコンポーネントの追加

音を鳴らしたいゲームオブジェクトにAudioSourceコンポーネントを2つ追加しましょう。

そして、「ゲーム開始時に再生」のチェックを外しておきましょう。

AudioClip(オーディオクリップ)の設定

AudioSourceコンポーネントのAudioClipのプロパティに音源ファルをドラッグ&ドロップして設定します。

スクリプトを書く

以下のスクリプトを書きます。クラス名は作成したスクリプトのファイル名になります。

上キーと下キーを押した時に、それぞれ異なった音を鳴らすスクリプトです。

そして、適当なゲームオブジェクトにアタッチしてください。

 

★[SerializeField]について★

[SerializeField]を使うと、インスペクターから値を変えられるようになります。

publicでもインスペクターから値を変えられますが、publicとの違いは、他のスクリプトから対象のフィールドを操作できるかどうか、という点です。

publicなら他のスクリプトから直接値を変更できますが、[SerializeField]の場合はprivateなフィールドのままなので、他のスクリプトから値を変更できません。

他のスクリプトから操作する必要が無い場合は、[SerializeField]を使いましょう。

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

public class SoundManager : MonoBehaviour
{
    [SerializeField] AudioSource asBakuhatu;
    [SerializeField] AudioSource asItemGet;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))//もし上キーが押されたら
        {
            asBakuhatu.Play();
        }

        if (Input.GetKeyDown(KeyCode.DownArrow)) //もし下キーが押されたら
        {
            asItemGet.Play();
        }

    }
}

AudioSourceコンポーネントの設定

[SerializeField]で宣言した変数に、インスペクターからAudioSourceコンポーネント2つをドラッグ&ドロップして設定します。

×AudioClip(オーディオクリップ)ではなく、◯AudioSourceコンポーネントです。間違えないように注意してください。

確認

実行して、上下キーを押した動作確認しましょう。