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