LoginSignup
1
0

More than 1 year has passed since last update.

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を含むオブジェクトが破壊と再生されるため、うまく関数を呼び出すことができなくなってしまうからです。

それぞれのコーディング

SoundManager.cs
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]); 
    }
}

GameManager.cs
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を変更することで、音源データの変更が可能となり、状況に応じた音を鳴らすことができるようになります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0