この記事で得られること
・1weekで音管理をするソースコードでいい感じに作れたものがあったので共有します
・音源ごとに音の大きさを変更できます
スタジオしまづとは
チャンネル登録者6700人
YouTube有料メンバーシップ 110人
解説動画
できること
画像のように
・音源のラベル
・音源
・ボリューム
の設定を個別にできるようになります。
ソースコード
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);
利点
・音源とラベルにズレがないので設定ミスが減る
・音源ごとにボリュームの調節ができる
実際に活用したゲームジャムの様子
ってことで長くなってきたので終わります!よければ本日もしたのハートマーク&コメントいただけると嬉しいです!おやすみなさい!
コメント