添加struct管理AudioData
This commit is contained in:
@@ -22,24 +22,11 @@ public static class AudioCoreManager
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 播放语音
|
/// 播放语音
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="clip">音频</param>
|
/// <param name="audioData">{[clip:音频], [volume:音量],
|
||||||
/// <param name="onComplete">结束行为</param>
|
/// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}</param>
|
||||||
/// <param name="delay">结束行为延迟执行时间</param>
|
public static void PlayVoice(AudioData audioData)
|
||||||
public static void PlayVoice(AudioClip clip, System.Action onComplete, float delay = 0f)
|
|
||||||
{
|
{
|
||||||
Voice.Play(clip, 1f, onComplete, delay);
|
Voice.Play(audioData);
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 播放语音
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="clip">音频</param>
|
|
||||||
/// <param name="volume">音量</param>
|
|
||||||
/// <param name="onComplete">结束行为</param>
|
|
||||||
/// <param name="delay">结束行为延迟执行时间</param>
|
|
||||||
public static void PlayVoice(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delay = 0f)
|
|
||||||
{
|
|
||||||
Voice.Play(clip, volume, onComplete, delay);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -47,7 +34,8 @@ public static class AudioCoreManager
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void StopVoice()
|
public static void StopVoice()
|
||||||
{
|
{
|
||||||
Voice.Stop();
|
AudioData audioData = new AudioData();
|
||||||
|
Voice.Stop(audioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -57,24 +45,11 @@ public static class AudioCoreManager
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 播放音效
|
/// 播放音效
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="clip">音频</param>
|
/// <param name="audioData">{[clip:音频], [volume:音量],
|
||||||
/// <param name="onComplete">结束行为</param>
|
/// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}</param>
|
||||||
/// <param name="delay">结束行为延迟执行时间</param>
|
public static void PlaySFX(AudioData audioData)
|
||||||
public static void PlaySFX(AudioClip clip, System.Action onComplete, float delay = 0f)
|
|
||||||
{
|
{
|
||||||
SFX.Play(clip, 1f, onComplete, delay);
|
SFX.Play(audioData);
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 播放音效
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="clip">音频</param>
|
|
||||||
/// <param name="volume">音量</param>
|
|
||||||
/// <param name="onComplete">结束行为</param>
|
|
||||||
/// <param name="delay">结束行为延迟执行时间</param>
|
|
||||||
public static void PlaySFX(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delay = 0f)
|
|
||||||
{
|
|
||||||
SFX.Play(clip, volume, onComplete, delay);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -82,7 +57,8 @@ public static class AudioCoreManager
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void StopAllSFX()
|
public static void StopAllSFX()
|
||||||
{
|
{
|
||||||
SFX.Stop();
|
AudioData audioData = new AudioData();
|
||||||
|
SFX.Stop(audioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -92,21 +68,21 @@ public static class AudioCoreManager
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 播放背景音乐
|
/// 播放背景音乐
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="clip">音频</param>
|
/// <param name="audioData">{[clip:音频], [volume:音量], [fadeDuration:自然过渡时间]}</param>
|
||||||
/// <param name="volume">音量</param>
|
public static void PlayMusic(AudioData audioData)
|
||||||
/// <param name="fadeDuration">自然过渡时间</param>
|
|
||||||
public static void PlayMusic(AudioClip clip, float volume = 1f, float fadeDuration = 1f)
|
|
||||||
{
|
{
|
||||||
Music.Play(clip, volume, fadeDuration);
|
Music.Play(audioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 停止播放背景音乐
|
/// 停止播放背景音乐
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="fadeDuration">自然过渡时间</param>
|
/// <param name="fadeDuration">自然过渡时间</param>
|
||||||
public static void StopMusic(float fadeDuration = 1f)
|
public static void StopMusic(float fadeDuration = 1f)
|
||||||
{
|
{
|
||||||
Music.Stop(fadeDuration);
|
AudioData audioData = new AudioData();
|
||||||
|
audioData.fadeDuration = fadeDuration;
|
||||||
|
Music.Stop(audioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -2,28 +2,81 @@ using System.Collections;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Audio数据
|
||||||
|
/// </summary>
|
||||||
|
public struct AudioData
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 延迟播放时间
|
||||||
|
/// </summary>
|
||||||
|
public float delayTime;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 音频
|
||||||
|
/// </summary>
|
||||||
|
public AudioClip clip;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 音量
|
||||||
|
/// </summary>
|
||||||
|
public float volume;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 回调行为
|
||||||
|
/// </summary>
|
||||||
|
public System.Action onComplete;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 延迟回调执行的时间
|
||||||
|
/// </summary>
|
||||||
|
public float delayOnCompleteTime;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 自然过渡时间
|
||||||
|
/// </summary>
|
||||||
|
public float fadeDuration;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否不打断上一段对话
|
||||||
|
/// </summary>
|
||||||
|
public bool isNotOverVoice;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否是3D声音
|
||||||
|
/// </summary>
|
||||||
|
public bool is3D;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 3D声音载体
|
||||||
|
/// </summary>
|
||||||
|
public GameObject soundObject;
|
||||||
|
}
|
||||||
|
|
||||||
public interface IAudio
|
public interface IAudio
|
||||||
{
|
{
|
||||||
void Play(AudioClip audioClip,float volume, System.Action onComplete, float delay);
|
void Play(AudioData audioData);
|
||||||
|
|
||||||
void Stop();
|
void Stop(AudioData audioData);
|
||||||
|
|
||||||
void Stop(float delay);
|
|
||||||
|
|
||||||
void EndOperation(System.Action onComplete, float delay);
|
|
||||||
|
|
||||||
void Set3DPosition(Vector3 vector3);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public abstract class AbstractAudio : IAudio
|
public abstract class AbstractAudio : IAudio
|
||||||
{
|
{
|
||||||
public abstract void Play(AudioClip audioClip, float volume, System.Action onComplete, float delay);
|
public abstract void Play(AudioData audioData);
|
||||||
|
|
||||||
public abstract void Stop();
|
public abstract void Stop(AudioData audioData);
|
||||||
|
|
||||||
public abstract void Stop(float delay);
|
/// <summary>
|
||||||
|
/// 音频数据初始化
|
||||||
public abstract void EndOperation(System.Action onComplete, float delay);
|
/// </summary>
|
||||||
|
/// <param name="audioData"></param>
|
||||||
public abstract void Set3DPosition(Vector3 vector3);
|
/// <returns></returns>
|
||||||
|
public virtual AudioData AudioDataInitialize(AudioData audioData)
|
||||||
|
{
|
||||||
|
if(audioData.volume == 0)
|
||||||
|
{
|
||||||
|
audioData.volume = 1f;
|
||||||
|
}
|
||||||
|
return audioData;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class MusicPlayer
|
public class MusicPlayer : AbstractAudio
|
||||||
{
|
{
|
||||||
private AudioSourcePool audioSourcePool;
|
private AudioSourcePool audioSourcePool;
|
||||||
private AudioSource audioSource1;
|
private AudioSource audioSource1;
|
||||||
@@ -16,30 +16,29 @@ public class MusicPlayer
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 播放背景音乐
|
/// 播放背景音乐
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="clip">音频</param>
|
/// <param name="audioData">{[clip:音频], [volume:音量], [fadeDuration:自然过渡时间]}</param>
|
||||||
/// <param name="volume">音量</param>
|
public override void Play(AudioData audioData)
|
||||||
/// <param name="fadeDuration">自然过渡时间</param>
|
|
||||||
public void Play(AudioClip clip, float volume, float fadeDuration)
|
|
||||||
{
|
{
|
||||||
if(audioSource1 == null)
|
audioData = AudioDataInitialize(audioData);
|
||||||
|
if (audioSource1 == null)
|
||||||
{
|
{
|
||||||
audioSource1 = audioSourcePool.GetAudioSource("Music");
|
audioSource1 = audioSourcePool.GetAudioSource("Music");
|
||||||
audioSource1.clip = clip;
|
audioSource1.clip = audioData.clip;
|
||||||
audioSource1.volume = volume;
|
audioSource1.volume = audioData.volume;
|
||||||
currentAudioSource = audioSource1;
|
currentAudioSource = audioSource1;
|
||||||
currentAudioSource.Play();
|
currentAudioSource.Play();
|
||||||
CoroutineHelper.StartCoroutine(FadeMusic(audioSource1, fadeDuration, audioSource2));
|
CoroutineHelper.StartCoroutine(FadeMusic(audioSource1, audioData.fadeDuration, audioSource2));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (audioSource2 == null)
|
if (audioSource2 == null)
|
||||||
{
|
{
|
||||||
audioSource2 = audioSourcePool.GetAudioSource("Music");
|
audioSource2 = audioSourcePool.GetAudioSource("Music");
|
||||||
audioSource2.clip = clip;
|
audioSource2.clip = audioData.clip;
|
||||||
audioSource2.volume = volume;
|
audioSource2.volume = audioData.volume;
|
||||||
currentAudioSource = audioSource2;
|
currentAudioSource = audioSource2;
|
||||||
currentAudioSource.Play();
|
currentAudioSource.Play();
|
||||||
CoroutineHelper.StartCoroutine(FadeMusic(audioSource2, fadeDuration, audioSource1));
|
CoroutineHelper.StartCoroutine(FadeMusic(audioSource2, audioData.fadeDuration, audioSource1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -52,10 +51,11 @@ public class MusicPlayer
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 关闭背景音乐
|
/// 关闭背景音乐
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="fadeDuration">关闭时的自然过渡时间</param>
|
/// <param name="audioData">{[fadeDuration:自然过渡时间]}</param>
|
||||||
public void Stop(float fadeDuration)
|
public override void Stop(AudioData audioData)
|
||||||
{
|
{
|
||||||
CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, fadeDuration));
|
audioData = AudioDataInitialize(audioData);
|
||||||
|
CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, audioData.fadeDuration));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using System.Collections;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class SFXPlayer
|
public class SFXPlayer : AbstractAudio
|
||||||
{
|
{
|
||||||
private AudioSourcePool audioSourcePool;
|
private AudioSourcePool audioSourcePool;
|
||||||
private List<AudioSource> activeSources = new List<AudioSource>(); // 正在播放的 AudioSource 列表
|
private List<AudioSource> activeSources = new List<AudioSource>(); // 正在播放的 AudioSource 列表
|
||||||
@@ -15,30 +15,29 @@ public class SFXPlayer
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 播放音效
|
/// 播放音效
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="clip">音频</param>
|
/// <param name="audioData">{[clip:音频], [volume:音量],
|
||||||
/// <param name="volume">音量</param>
|
/// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}</param>
|
||||||
/// <param name="onComplete">结束行为</param>
|
public override void Play(AudioData audioData)
|
||||||
/// <param name="delay">延迟结束行为时间</param>
|
|
||||||
public void Play(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delay = 0f)
|
|
||||||
{
|
{
|
||||||
AudioSource source = audioSourcePool.GetAudioSource("SFX");
|
AudioSource source = audioSourcePool.GetAudioSource("SFX");
|
||||||
if (source == null) return;
|
if (source == null) return;
|
||||||
|
|
||||||
source.clip = clip;
|
source.clip = audioData.clip;
|
||||||
source.volume = volume;
|
source.volume = audioData.volume;
|
||||||
source.Play();
|
source.Play();
|
||||||
|
|
||||||
// 将 AudioSource 加入活动列表
|
// 将 AudioSource 加入活动列表
|
||||||
activeSources.Add(source);
|
activeSources.Add(source);
|
||||||
|
|
||||||
// 使用协程处理延迟和回调
|
// 使用协程处理延迟和回调
|
||||||
CoroutineHelper.StartCoroutine(PlaySFXCoroutine(source, delay, onComplete));
|
CoroutineHelper.StartCoroutine(PlaySFXCoroutine(source, audioData.delayOnCompleteTime, audioData.onComplete));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 停止所有音效
|
/// 停止所有音效
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Stop()
|
/// <param name="audioData">{[无可使用变量]}</param>
|
||||||
|
public override void Stop(AudioData audioData)
|
||||||
{
|
{
|
||||||
foreach (var source in activeSources)
|
foreach (var source in activeSources)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,27 +21,27 @@ public class Test : MonoBehaviour
|
|||||||
{
|
{
|
||||||
if (Input.GetKeyDown(KeyCode.A))
|
if (Input.GetKeyDown(KeyCode.A))
|
||||||
{
|
{
|
||||||
AudioCoreManager.PlayVoice(clip1);
|
AudioCoreManager.PlayVoice(new AudioData { clip = clip1 });
|
||||||
}
|
}
|
||||||
if (Input.GetKeyDown(KeyCode.S))
|
if (Input.GetKeyDown(KeyCode.S))
|
||||||
{
|
{
|
||||||
AudioCoreManager.PlayVoice(clip2);
|
AudioCoreManager.PlayVoice(new AudioData { clip = clip2 });
|
||||||
}
|
}
|
||||||
if (Input.GetKeyDown(KeyCode.D))
|
if (Input.GetKeyDown(KeyCode.D))
|
||||||
{
|
{
|
||||||
AudioCoreManager.PlaySFX(clip21);
|
AudioCoreManager.PlaySFX(new AudioData { clip = clip21 });
|
||||||
}
|
}
|
||||||
if (Input.GetKeyDown(KeyCode.F))
|
if (Input.GetKeyDown(KeyCode.F))
|
||||||
{
|
{
|
||||||
AudioCoreManager.PlaySFX(clip22);
|
AudioCoreManager.PlaySFX(new AudioData { clip = clip22 });
|
||||||
}
|
}
|
||||||
if (Input.GetKeyDown(KeyCode.G))
|
if (Input.GetKeyDown(KeyCode.G))
|
||||||
{
|
{
|
||||||
AudioCoreManager.PlayMusic(clip31);
|
AudioCoreManager.PlayMusic(new AudioData { clip = clip31 });
|
||||||
}
|
}
|
||||||
if (Input.GetKeyDown(KeyCode.H))
|
if (Input.GetKeyDown(KeyCode.H))
|
||||||
{
|
{
|
||||||
AudioCoreManager.PlayMusic(clip32);
|
AudioCoreManager.PlayMusic(new AudioData { clip = clip32 });
|
||||||
}
|
}
|
||||||
if (Input.GetKeyDown(KeyCode.Z))
|
if (Input.GetKeyDown(KeyCode.Z))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class VoicePlayer
|
public class VoicePlayer : AbstractAudio
|
||||||
{
|
{
|
||||||
private AudioSourcePool audioSourcePool;
|
private AudioSourcePool audioSourcePool;
|
||||||
private AudioSource currentSource;
|
private AudioSource currentSource;
|
||||||
@@ -15,15 +15,16 @@ public class VoicePlayer
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 播放语音
|
/// 播放语音
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="clip">音频</param>
|
/// <param name="audioData">{[clip:音频], [volume:音量],
|
||||||
/// <param name="volume">音量</param>
|
/// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}</param>
|
||||||
/// <param name="onComplete">结束行为</param>
|
public override void Play(AudioData audioData)
|
||||||
/// <param name="delayOnComplete">延迟结束行为时间</param>
|
|
||||||
public void Play(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delayOnComplete = 0f)
|
|
||||||
{
|
{
|
||||||
// 停止当前正在播放的语音与旧协程
|
// 停止当前正在播放的语音与旧协程
|
||||||
Stop();
|
Stop(new AudioData { });
|
||||||
if(myCoroutine!= null)
|
|
||||||
|
audioData = AudioDataInitialize(audioData);
|
||||||
|
|
||||||
|
if (myCoroutine!= null)
|
||||||
{
|
{
|
||||||
CoroutineHelper.StopCoroutine(myCoroutine);
|
CoroutineHelper.StopCoroutine(myCoroutine);
|
||||||
myCoroutine = null;
|
myCoroutine = null;
|
||||||
@@ -31,18 +32,19 @@ public class VoicePlayer
|
|||||||
currentSource = audioSourcePool.GetAudioSource("Voice");
|
currentSource = audioSourcePool.GetAudioSource("Voice");
|
||||||
if (currentSource == null) return;
|
if (currentSource == null) return;
|
||||||
|
|
||||||
currentSource.clip = clip;
|
currentSource.clip = audioData.clip;
|
||||||
currentSource.volume = volume;
|
currentSource.volume = audioData.volume;
|
||||||
currentSource.Play();
|
currentSource.Play();
|
||||||
|
|
||||||
// 使用协程处理延迟和回调
|
// 使用协程处理延迟和回调
|
||||||
myCoroutine = CoroutineHelper.StartCoroutine(PlayVoiceCoroutine(currentSource, delayOnComplete, onComplete));
|
myCoroutine = CoroutineHelper.StartCoroutine(PlayVoiceCoroutine(currentSource, audioData.delayOnCompleteTime, audioData.onComplete));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 停止语音
|
/// 停止语音
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Stop()
|
/// /// <param name="audioData">{[无可使用变量]}</param>
|
||||||
|
public override void Stop(AudioData audioData)
|
||||||
{
|
{
|
||||||
if (currentSource != null && currentSource.isPlaying)
|
if (currentSource != null && currentSource.isPlaying)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user