168 lines
4.8 KiB
C#
168 lines
4.8 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Audio;
|
|
|
|
public enum AudioType
|
|
{
|
|
None,
|
|
BG,
|
|
FX,
|
|
|
|
}
|
|
public class AudioManager : MonoSingleton<AudioManager>
|
|
{
|
|
Dictionary<AudioType,AudioSource> dic_audioList=new Dictionary<AudioType, AudioSource> ();
|
|
public AudioMixer audioMixer;
|
|
|
|
//public AudioMixer mixer;
|
|
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
var v = UIManager.Instance.transform.GetChild(0).GetComponents<AudioSource>();
|
|
dic_audioList.Add(AudioType.BG, v[0]);
|
|
v[0].outputAudioMixerGroup = audioMixer.FindMatchingGroups("BG")[0];
|
|
dic_audioList.Add(AudioType.FX, v[1]);
|
|
v[1].outputAudioMixerGroup = audioMixer.FindMatchingGroups("FX")[0];
|
|
|
|
int a = PlayerPrefs.GetInt("first");
|
|
if (a==0)
|
|
{
|
|
PlayerPrefs.SetFloat("slider_AudioBG",1f);
|
|
PlayerPrefs.SetFloat("slider_FX", 1f);
|
|
PlayerPrefs.SetInt("first",1);
|
|
|
|
}
|
|
float value = PlayerPrefs.GetFloat("slider_AudioBG");
|
|
audioMixer.SetFloat("BGVolume", 20.0f * Mathf.Log10(Mathf.Max(value, 0.0001f)));
|
|
|
|
value = PlayerPrefs.GetFloat("slider_FX");
|
|
audioMixer.SetFloat("FXVolume", 20.0f * Mathf.Log10(Mathf.Max(value, 0.0001f)));
|
|
dic_audioList[AudioType.BG].outputAudioMixerGroup = audioMixer.FindMatchingGroups("Master/BG")[0];
|
|
dic_audioList[AudioType.FX].outputAudioMixerGroup = audioMixer.FindMatchingGroups("Master/FX")[0];
|
|
}
|
|
public AudioSource GetAudioSource(AudioType audioType)
|
|
{
|
|
if (dic_audioList.ContainsKey(audioType))
|
|
{
|
|
return dic_audioList[audioType];
|
|
}
|
|
else
|
|
return null;
|
|
|
|
}
|
|
public void StopBG()
|
|
{
|
|
AudioType audioType = AudioType.BG;
|
|
if (dic_audioList.ContainsKey(audioType))
|
|
{
|
|
dic_audioList[audioType].Stop();
|
|
|
|
}
|
|
}
|
|
public void ChangeBG(int audioID)
|
|
{
|
|
if (audioID == 0)
|
|
return;
|
|
if (AudioResourcesData.audioClipDic.ContainsKey(audioID))
|
|
{
|
|
|
|
AudioClip audioClip = AudioResourcesData.audioClipDic[audioID];
|
|
AudioType audioType = AudioType.BG;
|
|
if (dic_audioList.ContainsKey(audioType))
|
|
{
|
|
dic_audioList[audioType].clip = audioClip;
|
|
dic_audioList[audioType].Play();
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//UIManager.Instance.ShowBoardError("未找到"+audioID);
|
|
Debug.LogError("未找到音频ID: " + audioID);
|
|
}
|
|
|
|
}
|
|
public void ChangeBG(AudioClip audioClip)
|
|
{
|
|
AudioType audioType=AudioType.BG;
|
|
if (dic_audioList.ContainsKey(audioType))
|
|
{
|
|
dic_audioList[audioType].clip = audioClip;
|
|
dic_audioList[audioType].Play();
|
|
|
|
}
|
|
}
|
|
public void PlayerFX(int audioID)
|
|
{
|
|
if (audioID == 0)
|
|
return;
|
|
if (AudioResourcesData.audioClipDic.ContainsKey(audioID))
|
|
{
|
|
|
|
AudioClip audioClip = AudioResourcesData.audioClipDic[audioID];
|
|
AudioType audioType = AudioType.FX;
|
|
if (dic_audioList.ContainsKey(audioType))
|
|
{
|
|
dic_audioList[audioType].PlayOneShot(audioClip);
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//UIManager.Instance.ShowBoardError("未找到"+audioID);
|
|
Debug.LogError("未找到音频ID: " + audioID);
|
|
}
|
|
|
|
}
|
|
public void PlayFX(AudioClip audioClip)
|
|
{
|
|
AudioType audioType = AudioType.FX;
|
|
if (dic_audioList.ContainsKey(audioType))
|
|
{
|
|
dic_audioList[audioType].PlayOneShot(audioClip);
|
|
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按音效资源名(#Audio 表 AudioResourcesPath,如 PW_Shark_Show)播放音效。
|
|
/// 名字 → ID 走 tbaudio.json 映射,表 ID 调整时无需改代码。
|
|
/// </summary>
|
|
public void PlayerFXByName(string audioName)
|
|
{
|
|
if (string.IsNullOrEmpty(audioName)) return;
|
|
if (AudioResourcesData.name_IDDic != null && AudioResourcesData.name_IDDic.TryGetValue(audioName, out int audioID))
|
|
{
|
|
PlayerFX(audioID);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning("未找到音频资源名: " + audioName);
|
|
}
|
|
}
|
|
public bool UpdateAudioClip(AudioType audioType,AudioClip audioClip)
|
|
{
|
|
if (dic_audioList.ContainsKey(audioType))
|
|
{
|
|
dic_audioList[audioType].clip=audioClip;
|
|
dic_audioList[audioType].Play();
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
|
|
public bool PlayOneShot(AudioType audioType, AudioClip audioClip)
|
|
{
|
|
if (dic_audioList.ContainsKey(audioType))
|
|
{
|
|
dic_audioList[audioType].PlayOneShot(audioClip);
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
}
|