#この記事で得られること
・1weekで音管理をするソースコードでいい感じに作れたものがあったので共有します
・音源ごとに音の大きさを変更できます
#できること
画像のように
・音源のラベル
・音源
・ボリューム
の設定を個別にできるようになります。
#解説動画
https://youtu.be/nERSRHegijc
#コード
SoundManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SoundManager : MonoBehaviour
{
[SerializeField] AudioSource bgmAudioSource;
[SerializeField] AudioSource seAudioSource;
[SerializeField] List<BGMSoundData> bgmSoundDatas;
[SerializeField] List<SESoundData> seSoundDatas;
public float masterVolume = 1;
public float bgmMasterVolume = 1;
public float seMasterVolume = 1;
public static SoundManager Instance { get; private set; }
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public void PlayBGM(BGMSoundData.BGM bgm)
{
BGMSoundData data = bgmSoundDatas.Find(data => data.bgm == bgm);
bgmAudioSource.clip = data.audioClip;
bgmAudioSource.volume = data.volume * bgmMasterVolume * masterVolume;
bgmAudioSource.Play();
}
public void PlaySE(SESoundData.SE se)
{
SESoundData data = seSoundDatas.Find(data => data.se == se);
seAudioSource.volume = data.volume * seMasterVolume * masterVolume;
seAudioSource.PlayOneShot(data.audioClip);
}
}
[System.Serializable]
public class BGMSoundData
{
public enum BGM
{
Title,
Dungeon,
Hoge, // これがラベルになる
}
public BGM bgm;
public AudioClip audioClip;
[Range(0, 1)]
public float volume = 1;
}
[System.Serializable]
public class SESoundData
{
public enum SE
{
Attack,
Damage,
Hoge, // これがラベルになる
}
public SE se;
public AudioClip audioClip;
[Range(0, 1)]
public float volume = 1;
}
#使い方
音を鳴らしたいところで以下のように実行してやればOK
SoundManager.Instance.PlayBGM(BGMSoundData.BGM.Title);
#利点
・音源とラベルにズレがないので設定ミスが減る
・音源ごとにボリュームの調節ができる
#スタジオしまづとは
Unityを使ったゲーム開発のサポートをする団体です