292 lines
8.1 KiB
C#
292 lines
8.1 KiB
C#
|
|
using DG.Tweening;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using Unity.VisualScripting;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public class AudioManager : MBSingletonManager<AudioManager>
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
private bool isAlternate;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
///ѭ<><D1AD><EFBFBD><EFBFBD>Ч<EFBFBD>ֵ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
private Dictionary<string, AudioSource> circulateAudioDic = new Dictionary<string, AudioSource>();
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[SerializeField] private AudioSource backgroundMusic;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>Ч<EFBFBD><D0A7>ƵԴ1
|
|||
|
|
/// </summary>
|
|||
|
|
[SerializeField] private AudioSource soundEffectsourceOne;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>Ч<EFBFBD><D0A7>ƵԴ2
|
|||
|
|
/// </summary>
|
|||
|
|
[SerializeField] private AudioSource soundEffectsourceTwo;
|
|||
|
|
|
|||
|
|
private void Awake()
|
|||
|
|
{
|
|||
|
|
GenerateKarma();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void Start()
|
|||
|
|
{
|
|||
|
|
Init();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
|||
|
|
/// </summary>
|
|||
|
|
private void GenerateKarma()
|
|||
|
|
{
|
|||
|
|
backgroundMusic = this.AddComponent<AudioSource>();
|
|||
|
|
backgroundMusic.playOnAwake = true;
|
|||
|
|
backgroundMusic.loop = true;
|
|||
|
|
soundEffectsourceOne = this.AddComponent<AudioSource>();
|
|||
|
|
soundEffectsourceOne.playOnAwake = false;
|
|||
|
|
soundEffectsourceTwo = this.AddComponent<AudioSource>();
|
|||
|
|
soundEffectsourceTwo.playOnAwake= false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ʼ<EFBFBD><CABC>
|
|||
|
|
/// </summary>
|
|||
|
|
private void Init()
|
|||
|
|
{
|
|||
|
|
backgroundMusic.volume = UserDataManager.Instance.userData.soundSwitchData.bKMusicVolume;
|
|||
|
|
SetBkMusicClip();
|
|||
|
|
SetAllSEAudio();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="audioClip"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
public void SetBackgroundMusic(AudioClip audioClip)
|
|||
|
|
{
|
|||
|
|
backgroundMusic.clip = audioClip;
|
|||
|
|
SetBkMusicClip();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public void SetBkMusicClip()
|
|||
|
|
{
|
|||
|
|
if (UserDataManager.Instance.userData.soundSwitchData.isOpenBKMusic)
|
|||
|
|
{
|
|||
|
|
backgroundMusic.Play();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
backgroundMusic.Stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public void SetBkMusic(bool isOpen,float fadeTime)
|
|||
|
|
{
|
|||
|
|
if (UserDataManager.Instance.userData.soundSwitchData.isOpenBKMusic)
|
|||
|
|
{
|
|||
|
|
if (isOpen)
|
|||
|
|
{
|
|||
|
|
float volume = 0;
|
|||
|
|
backgroundMusic.Play();
|
|||
|
|
DOTween.To(() => volume, x => volume = x, 1, fadeTime).OnUpdate(() =>
|
|||
|
|
{
|
|||
|
|
backgroundMusic.volume = volume;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
float volume = 1;
|
|||
|
|
DOTween.To(() => volume, x => volume = x, 0, fadeTime).OnUpdate(() =>
|
|||
|
|
{
|
|||
|
|
backgroundMusic.volume = volume;
|
|||
|
|
}).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
backgroundMusic.Pause();
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>С
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="value"></param>
|
|||
|
|
public void SetBKMusicVolume(float value)
|
|||
|
|
{
|
|||
|
|
backgroundMusic.volume = value;
|
|||
|
|
UserDataManager.Instance.SetBKMusicVolume(value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>С
|
|||
|
|
/// </summary>
|
|||
|
|
public void SetSEVolume(float value)
|
|||
|
|
{
|
|||
|
|
UserDataManager.Instance.SetSEVolume(value);
|
|||
|
|
SetAllSEAudio();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>Ч<EFBFBD><D0A7>С
|
|||
|
|
/// </summary>
|
|||
|
|
public void SetAllSEAudio()
|
|||
|
|
{
|
|||
|
|
foreach (var item in circulateAudioDic)
|
|||
|
|
{
|
|||
|
|
if (UserDataManager.Instance.userData.soundSwitchData.isOpenSEMusic)
|
|||
|
|
{
|
|||
|
|
circulateAudioDic[item.Key].volume = UserDataManager.Instance.userData.soundSwitchData.sEVolume;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
circulateAudioDic[item.Key].volume = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
soundEffectsourceOne.volume = UserDataManager.Instance.userData.soundSwitchData.sEVolume;
|
|||
|
|
soundEffectsourceTwo.volume = UserDataManager.Instance.userData.soundSwitchData.sEVolume;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="clip"><3E><>Ч</param>
|
|||
|
|
/// <param name="isCirculate"><3E>Ƿ<EFBFBD>ѭ<EFBFBD><D1AD></param>
|
|||
|
|
/// <param name="isShank"><3E>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
public void PlaySound(AudioClip clip, bool isCirculate = false, bool isShank = true)
|
|||
|
|
{
|
|||
|
|
if (circulateAudioDic.ContainsKey(clip.name)) return;
|
|||
|
|
isAlternate = !isAlternate;
|
|||
|
|
Shank(isShank);
|
|||
|
|
|
|||
|
|
if (isCirculate)
|
|||
|
|
{
|
|||
|
|
AudioSource audioSource = this.gameObject.AddComponent<AudioSource>();
|
|||
|
|
audioSource.clip = clip;
|
|||
|
|
audioSource.loop = true;
|
|||
|
|
audioSource.Play();
|
|||
|
|
circulateAudioDic.Add(clip.name, audioSource);
|
|||
|
|
|
|||
|
|
audioSource.volume = UserDataManager.Instance.userData.soundSwitchData.isOpenSEMusic ? UserDataManager.Instance.userData.soundSwitchData.sEVolume: 0;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (UserDataManager.Instance.userData.soundSwitchData.isOpenSEMusic)
|
|||
|
|
{
|
|||
|
|
if (isAlternate)
|
|||
|
|
{
|
|||
|
|
soundEffectsourceOne.PlayOneShot(clip);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
soundEffectsourceTwo.PlayOneShot(clip);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>3D<33><44>Ч
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="obj"><3E><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD></param>
|
|||
|
|
/// <param name="clip"><3E><>Ƶ</param>
|
|||
|
|
/// <param name="isCirculate"><3E>Ƿ<EFBFBD>ѭ<EFBFBD><D1AD></param>
|
|||
|
|
/// <param name="isShank"><3E>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
public void Play3DSound(GameObject obj,AudioClip clip,bool isCirculate=false,bool isShank=true)
|
|||
|
|
{
|
|||
|
|
Shank(isShank);
|
|||
|
|
|
|||
|
|
AudioSource audioSource = obj.AddComponent<AudioSource>();
|
|||
|
|
audioSource.clip = clip;
|
|||
|
|
audioSource.spatialBlend = 1;
|
|||
|
|
audioSource.loop = isCirculate;
|
|||
|
|
audioSource.Play();
|
|||
|
|
|
|||
|
|
if(isCirculate)
|
|||
|
|
{
|
|||
|
|
circulateAudioDic.Add(clip.name, audioSource);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
audioSource.volume = UserDataManager.Instance.userData.soundSwitchData.isOpenSEMusic ? UserDataManager.Instance.userData.soundSwitchData.sEVolume : 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="isShank"><3E>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
public void Shank(bool isShank)
|
|||
|
|
{
|
|||
|
|
#if UNITY_ANDROID || UNITY_IOS
|
|||
|
|
if (isShank)
|
|||
|
|
{
|
|||
|
|
CommonMethods.Instance.CellPhoneShank();
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>ر<EFBFBD>ָ<EFBFBD><D6B8>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>Ч
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="name"><3E><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="isFade"><3E>Ƿ<C7B7><F1BDA5BD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="fadeTime"><3E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1></param>
|
|||
|
|
public void ClearIndividually(string name, bool isFade=false,float fadeTime=0)
|
|||
|
|
{
|
|||
|
|
if (circulateAudioDic.ContainsKey(name))
|
|||
|
|
{
|
|||
|
|
float volume = 1;
|
|||
|
|
if (isFade)
|
|||
|
|
{
|
|||
|
|
DOTween.To(() => volume, x => volume = x, 0, fadeTime).OnUpdate(() =>
|
|||
|
|
{
|
|||
|
|
circulateAudioDic[name].volume = volume;
|
|||
|
|
}).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
if (volume <= 0)
|
|||
|
|
{
|
|||
|
|
Destroy(circulateAudioDic[name]);
|
|||
|
|
circulateAudioDic.Remove(name);
|
|||
|
|
}
|
|||
|
|
}).SetUpdate(true);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
volume = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (volume <= 0)
|
|||
|
|
{
|
|||
|
|
Destroy(circulateAudioDic[name]);
|
|||
|
|
circulateAudioDic.Remove(name);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public void ClearAll()
|
|||
|
|
{
|
|||
|
|
foreach (var item in circulateAudioDic)
|
|||
|
|
{
|
|||
|
|
Destroy(circulateAudioDic[item.Key]);
|
|||
|
|
}
|
|||
|
|
circulateAudioDic.Clear();
|
|||
|
|
}
|
|||
|
|
}
|