84 lines
1.9 KiB
C#
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();
|
|
}
|
|
|
|
|
|
}
|