MIF_E31222569/Assets/ToothyV/Scripts/audioController.cs

125 lines
2.8 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class audioController : MonoBehaviour
{
[Header("Audio Sources")]
public AudioSource bgmSource;
public AudioSource sfxSource;
public AudioSource dubbingSource;
[Header("Audio Clips")]
public AudioClip[] bgmClips;
public AudioClip[] sfxClips;
public AudioClip[] dubsClips;
private Dictionary<string, AudioClip> bgmDictionary;
private Dictionary<string, AudioClip> sfxDictionary;
private Dictionary<string, AudioClip> dubsDictionary;
public static audioController Instance;
private void Awake()
{
if (Instance == null)
{
Instance = this;
}
else
{
Destroy(gameObject);
}
InitializeAudioDictionaries();
}
private void Start()
{
DontDestroyOnLoad(gameObject);
foreach(var key in dubsDictionary.Keys)
{
Debug.Log("Dubbing key: " + key);
}
}
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;
}
dubsDictionary = new Dictionary<string, AudioClip>();
foreach (var clip in dubsClips)
{
dubsDictionary[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 PlayDubbing(string dubbingName, float volume = 1f)
{
if (dubsDictionary.TryGetValue(dubbingName, out AudioClip dubsClip))
{
dubbingSource.PlayOneShot(dubsClip, volume);
}
else
{
Debug.LogWarning($"Dubbing '{dubbingName}' not found!");
}
}
public void StopDubbing()
{
dubbingSource.Stop();
}
public void StopSFX()
{
sfxSource.Stop();
}
}