#unityで音を出し方法
unityでゲーム開発をするとき、重要な要素となる『音』。
今回は、その音の鳴らし方についてまとめます。
その中でも、シーンを跨いでも音が鳴らせるような実装方法についてまとめます。
##音が鳴るのに必要な2つの要素
音が鳴るためには、
音を出すスピーカー(iphoneやラジカセ(もはや死語??)など)
音源(音源データやカセット・CDなど)
の2つが必要になります。
①に対応するのがAudio Source
②に対応するのがAudio Clip(s)
です。
また、シーンを跨いで音を鳴らすために必要な要素も2つあります。
1つは、Audio SourceとAudio Clip(s)を含み、シングルトン化したSoundManager Scriptを含むオブジェクト。
もう1つは、シングルトン化したSoundManager Scriptから関数を呼び出すためのSceneManager Scriptを含むオブジェクト。
ちなみに、直接SoundManagerから関数を呼び出さない理由は、シングルトン化されているためシーンの移動毎にSoundManager Scriptを含むオブジェクトが破壊と再生されるため、うまく関数を呼び出すことができなくなってしまうからです。
##それぞれのコーディング
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SoundManager : MonoBehaviour
{
//--シングルトン始まり--
public static SoundManager instance;
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(this.gameObject);
}
else
{
Destroy(this.gameObject);
}
}
//--シングルトン終わり--
public AudioSource audioSourceBGM; // BGMのスピーカー
public AudioClip[] audioClipsBGM; // BGMの音源
public AudioSource audioSourceSE; // SEのスピーカー
public AudioClip[] audioClipsSE;// SEの音源
//シーンに応じたBGMの鳴らす方法
public void PlayBGM(string sceneName)
{
audioSourceBGM.Stop();
switch (sceneName)
{
default:
case "TitleScene":
audioSourceBGM.clip = audioClipsBGM[0];
break;
case "GameScene":
audioSourceBGM.clip = audioClipsBGM[1];
break;
}
audioSourceBGM.Play();
}
// SEを一度だけならす方法
public void PlaySE(int index)
{
audioSourceSE.PlayOneShot(audioClipsSE[index]);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
//シーンが移動するときに、BGM変更しとSEを鳴らす
//シングルトン化しているので、instanceで呼び出す
public void ToTitle()
{
SceneManager.LoadScene("TitleScene");
SoundManager.instance.PlayBGM(“TitleScene")
SoundManager.instance.PlaySE(0);
}
}
あとは、ヒエラルキー上にからのオブジェクトを設置し、それぞれのscriptをアタッチします。
SoundManager ScriptをアタッチしたオブジェクトにはAudioSurceコンポーネントを2つ設置し、1つはSoundManager ScriptのaudioSourceBGMに貼り付け、もう1つは同じくSoundManager ScriptのaudioSourceSEに貼り付けます。
これによって、音を出すスピーカーが設置されます。
あとはBGMとSEそれぞれの音源データをSoundManager Script上のaudioClipsBGMまたはaudioClipsSEの配列の中に貼り付けていきます。
SoundManager Script上でClipsのindexを変更することで、音源データの変更が可能となり、状況に応じた音を鳴らすことができるようになります。