【Unity】音を管理するオブジェクトの作り方(1weekの知見共有)

この記事で得られること

・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);

利点

・音源とラベルにズレがないので設定ミスが減る

・音源ごとにボリュームの調節ができる

実際に活用したゲームジャムの様子

ってことで長くなってきたので終わります!よければ本日もしたのハートマーク&コメントいただけると嬉しいです!おやすみなさい!

Unity

Posted by studioshimazu