MIF_E31222569/Assets/ToothyV/Scripts/audioController.cs

84 lines
1.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class audioController : MonoBehaviour
{
[Header("Audio Sources")]
public AudioSource bgmSource;
public AudioSource sfxSource;
[Header("Audio Clips")]
public AudioClip[] bgmClips;
public AudioClip[] sfxClips;
private Dictionary<string, AudioClip> bgmDictionary;
private Dictionary<string, AudioClip> sfxDictionary;
public static audioController Instance;
private void Awake()
{
if (Instance == null)
{
Instance = this;
}
InitializeAudioDictionaries();
}
private void InitializeAudioDictionaries()
{
bgmDictionary = new Dictionary<string, AudioClip>();
foreach (var clip in bgmClips)
{
bgmDictionary[clip.name] = clip;
}
sfxDictionary = new Dictionary<string, AudioClip>();
foreach (var clip in sfxClips)
{
sfxDictionary[clip.name] = clip;
}
}
public void PlayBGM(string bgmName, float volume = 1f)
{
if (bgmDictionary.TryGetValue(bgmName, out AudioClip bgmClip))
{
bgmSource.clip = bgmClip;
bgmSource.volume = volume;
bgmSource.loop = true;
bgmSource.Play();
}
else
{
Debug.LogWarning($"BGM '{bgmName}' not found!");
}
}
public void StopBGM()
{
bgmSource.Stop();
}
public void PlaySFX(string sfxName, float volume = 1f)
{
if (sfxDictionary.TryGetValue(sfxName, out AudioClip sfxClip))
{
sfxSource.PlayOneShot(sfxClip, volume);
}
else
{
Debug.LogWarning($"SFX '{sfxName}' not found!");
}
}
public void StopSFX()
{
sfxSource.Stop();
}
}