解説(一部修正あり:詳しくは追加へ)
https://youtu.be/0cms8lI8XEA
AudioManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioManager : MonoBehaviour
{
[SerializeField] AudioClip[] seList;
AudioSource audioSource;
static AudioManager Instance = null; // staticをつけると別のファイルからでもアクセスできる
public static AudioManager GetInstance()
{
if (Instance == null)
{
Instance = FindObjectOfType<AudioManager>(); // AudioManager.csのついたオブジェクトを探して代入する
}
return Instance;
}
private void Awake()
{
if (this != GetInstance())
{
// 探してきたオブジェクトが自分自身じゃなければ破壊する(AudioManager.csのついたオブジェクトは1つのみになる)
Destroy(this.gameObject);
return;
}
audioSource = GetComponent<AudioSource>();
DontDestroyOnLoad(this.gameObject);
}
public void PlaySound(int index)
{
audioSource.PlayOneShot(seList[index]);
}
}
利用方法
・seList
に音源を設定
・音を鳴らしたい場所でAudioManager.GetInstance()PlaySound(0)
のコードを書く
追加
音量にスライダーの値を設定していた。(スライダーはシーンが変わると破壊され、戻ってくると初期の値をとるため毎回同じ値をとる=音量変えたのに変わらない現象)
void Start()
{
AudioManager.GetInstance().PlayBGM(0);
OnChangedBGMSlider();
OnChangedSESlider();
}
以下の関数を追加して、スライダーに音量を設定すればOK
void Start()
{
AudioManager.GetInstance().PlayBGM(0);
InitBGMSliderView();
InitSESliderView();
}
public void InitBGMSliderView()
{
bgmSlider.value = AudioManager.GetInstance().BGMVolume;
bgmVolumeText.text = string.Format("{0:0.00}", bgmSlider.value);
}
public void InitSESliderView()
{
seSlider.value = AudioManager.GetInstance().SEVolume;
seVolumeText.text = string.Format("{0:0.00}", seSlider.value);
}