From 63b6601fbe680da232841f88876373308560217d Mon Sep 17 00:00:00 2001
From: Han <1985708279@qq.com>
Date: Fri, 7 Mar 2025 17:52:50 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0struct=E7=AE=A1=E7=90=86Audio?=
=?UTF-8?q?Data?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../04.AudioCore/RunTime/AudioCoreManager.cs | 62 +++++---------
Assets/04.AudioCore/RunTime/IAudio.cs | 83 +++++++++++++++----
Assets/04.AudioCore/RunTime/MusicPlayer.cs | 30 +++----
Assets/04.AudioCore/RunTime/SFXPlayer.cs | 19 ++---
Assets/04.AudioCore/RunTime/Test.cs | 12 +--
Assets/04.AudioCore/RunTime/VoicePlayer.cs | 26 +++---
6 files changed, 131 insertions(+), 101 deletions(-)
diff --git a/Assets/04.AudioCore/RunTime/AudioCoreManager.cs b/Assets/04.AudioCore/RunTime/AudioCoreManager.cs
index 1bd0ad3..eea588a 100644
--- a/Assets/04.AudioCore/RunTime/AudioCoreManager.cs
+++ b/Assets/04.AudioCore/RunTime/AudioCoreManager.cs
@@ -22,24 +22,11 @@ public static class AudioCoreManager
///
/// 播放语音
///
- /// 音频
- /// 结束行为
- /// 结束行为延迟执行时间
- public static void PlayVoice(AudioClip clip, System.Action onComplete, float delay = 0f)
+ /// {[clip:音频], [volume:音量],
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}
+ public static void PlayVoice(AudioData audioData)
{
- Voice.Play(clip, 1f, onComplete, delay);
- }
-
- ///
- /// 播放语音
- ///
- /// 音频
- /// 音量
- /// 结束行为
- /// 结束行为延迟执行时间
- 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);
}
///
@@ -47,7 +34,8 @@ public static class AudioCoreManager
///
public static void StopVoice()
{
- Voice.Stop();
+ AudioData audioData = new AudioData();
+ Voice.Stop(audioData);
}
#endregion
@@ -57,24 +45,11 @@ public static class AudioCoreManager
///
/// 播放音效
///
- /// 音频
- /// 结束行为
- /// 结束行为延迟执行时间
- public static void PlaySFX(AudioClip clip, System.Action onComplete, float delay = 0f)
+ /// {[clip:音频], [volume:音量],
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}
+ public static void PlaySFX(AudioData audioData)
{
- SFX.Play(clip, 1f, onComplete, delay);
- }
-
- ///
- /// 播放音效
- ///
- /// 音频
- /// 音量
- /// 结束行为
- /// 结束行为延迟执行时间
- 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);
}
///
@@ -82,7 +57,8 @@ public static class AudioCoreManager
///
public static void StopAllSFX()
{
- SFX.Stop();
+ AudioData audioData = new AudioData();
+ SFX.Stop(audioData);
}
#endregion
@@ -92,21 +68,21 @@ public static class AudioCoreManager
///
/// 播放背景音乐
///
- /// 音频
- /// 音量
- /// 自然过渡时间
- public static void PlayMusic(AudioClip clip, float volume = 1f, float fadeDuration = 1f)
+ /// {[clip:音频], [volume:音量], [fadeDuration:自然过渡时间]}
+ public static void PlayMusic(AudioData audioData)
{
- Music.Play(clip, volume, fadeDuration);
+ Music.Play(audioData);
}
-
+
///
/// 停止播放背景音乐
///
/// 自然过渡时间
public static void StopMusic(float fadeDuration = 1f)
{
- Music.Stop(fadeDuration);
+ AudioData audioData = new AudioData();
+ audioData.fadeDuration = fadeDuration;
+ Music.Stop(audioData);
}
#endregion
diff --git a/Assets/04.AudioCore/RunTime/IAudio.cs b/Assets/04.AudioCore/RunTime/IAudio.cs
index ee188a8..c971a94 100644
--- a/Assets/04.AudioCore/RunTime/IAudio.cs
+++ b/Assets/04.AudioCore/RunTime/IAudio.cs
@@ -2,28 +2,81 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+///
+/// Audio数据
+///
+public struct AudioData
+{
+ ///
+ /// 延迟播放时间
+ ///
+ public float delayTime;
+
+ ///
+ /// 音频
+ ///
+ public AudioClip clip;
+
+ ///
+ /// 音量
+ ///
+ public float volume;
+
+ ///
+ /// 回调行为
+ ///
+ public System.Action onComplete;
+
+ ///
+ /// 延迟回调执行的时间
+ ///
+ public float delayOnCompleteTime;
+
+ ///
+ /// 自然过渡时间
+ ///
+ public float fadeDuration;
+
+ ///
+ /// 是否不打断上一段对话
+ ///
+ public bool isNotOverVoice;
+
+ ///
+ /// 是否是3D声音
+ ///
+ public bool is3D;
+
+ ///
+ /// 3D声音载体
+ ///
+ 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);
+ ///
+ /// 音频数据初始化
+ ///
+ ///
+ ///
+ public virtual AudioData AudioDataInitialize(AudioData audioData)
+ {
+ if(audioData.volume == 0)
+ {
+ audioData.volume = 1f;
+ }
+ return audioData;
+ }
}
diff --git a/Assets/04.AudioCore/RunTime/MusicPlayer.cs b/Assets/04.AudioCore/RunTime/MusicPlayer.cs
index d8fff31..47d7dc4 100644
--- a/Assets/04.AudioCore/RunTime/MusicPlayer.cs
+++ b/Assets/04.AudioCore/RunTime/MusicPlayer.cs
@@ -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
///
/// 播放背景音乐
///
- /// 音频
- /// 音量
- /// 自然过渡时间
- public void Play(AudioClip clip, float volume, float fadeDuration)
+ /// {[clip:音频], [volume:音量], [fadeDuration:自然过渡时间]}
+ 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
///
/// 关闭背景音乐
///
- /// 关闭时的自然过渡时间
- public void Stop(float fadeDuration)
+ /// {[fadeDuration:自然过渡时间]}
+ public override void Stop(AudioData audioData)
{
- CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, fadeDuration));
+ audioData = AudioDataInitialize(audioData);
+ CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, audioData.fadeDuration));
}
///
diff --git a/Assets/04.AudioCore/RunTime/SFXPlayer.cs b/Assets/04.AudioCore/RunTime/SFXPlayer.cs
index e599231..4fcc960 100644
--- a/Assets/04.AudioCore/RunTime/SFXPlayer.cs
+++ b/Assets/04.AudioCore/RunTime/SFXPlayer.cs
@@ -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 activeSources = new List(); // 正在播放的 AudioSource 列表
@@ -15,30 +15,29 @@ public class SFXPlayer
///
/// 播放音效
///
- /// 音频
- /// 音量
- /// 结束行为
- /// 延迟结束行为时间
- public void Play(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delay = 0f)
+ /// {[clip:音频], [volume:音量],
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}
+ 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));
}
///
/// 停止所有音效
///
- public void Stop()
+ /// {[无可使用变量]}
+ public override void Stop(AudioData audioData)
{
foreach (var source in activeSources)
{
diff --git a/Assets/04.AudioCore/RunTime/Test.cs b/Assets/04.AudioCore/RunTime/Test.cs
index d2e496a..ffd9fb6 100644
--- a/Assets/04.AudioCore/RunTime/Test.cs
+++ b/Assets/04.AudioCore/RunTime/Test.cs
@@ -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))
{
diff --git a/Assets/04.AudioCore/RunTime/VoicePlayer.cs b/Assets/04.AudioCore/RunTime/VoicePlayer.cs
index 452dcb9..da48bc0 100644
--- a/Assets/04.AudioCore/RunTime/VoicePlayer.cs
+++ b/Assets/04.AudioCore/RunTime/VoicePlayer.cs
@@ -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
///
/// 播放语音
///
- /// 音频
- /// 音量
- /// 结束行为
- /// 延迟结束行为时间
- public void Play(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delayOnComplete = 0f)
+ /// {[clip:音频], [volume:音量],
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}
+ 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));
}
///
/// 停止语音
///
- public void Stop()
+ /// /// {[无可使用变量]}
+ public override void Stop(AudioData audioData)
{
if (currentSource != null && currentSource.isPlaying)
{