From 739b6c8c9e5acb71cc169f370f676527aa10c339 Mon Sep 17 00:00:00 2001
From: Han <1985708279@qq.com>
Date: Wed, 16 Jul 2025 13:54:05 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=90m=E3=80=91=E5=A2=9E=E6=B7=BB?=
=?UTF-8?q?=E8=AE=BE=E7=BD=AE3D=E9=9F=B3=E9=A2=91=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../04.AudioCore/RunTime/Abstract/IAudio.cs | 15 ++--
.../04.AudioCore/RunTime/Base/MusicPlayer.cs | 53 ++++++++++++++-
Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs | 27 +++++++-
.../04.AudioCore/RunTime/Base/VoicePlayer.cs | 68 ++++++++++++++++---
.../RunTime/Use/AudioCoreManager.cs | 24 ++++---
Assets/04.AudioCore/package.json | 2 +-
6 files changed, 165 insertions(+), 24 deletions(-)
diff --git a/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs b/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs
index 90cb691..c5f639f 100644
--- a/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs
+++ b/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs
@@ -43,16 +43,21 @@ namespace Stary.Evo.AudioCore
/// 是否不打断上一段对话
///
public bool isNotOverVoice;
+
+ ///
+ /// 是否是3D音频
+ ///
+ public bool is3DAudio;
///
- /// 是否是3D声音
+ /// 3D声音位置
///
- public bool is3D;
-
+ public Vector3 audio3DPosition;
+
///
- /// 3D声音载体
+ /// 3D声音最大距离
///
- public GameObject soundObject;
+ public float audio3DMaxDistance;
}
public interface IAudio
diff --git a/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs b/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs
index 13ece29..27f5532 100644
--- a/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs
+++ b/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs
@@ -19,7 +19,8 @@ namespace Stary.Evo.AudioCore
///
/// 播放背景音乐
///
- /// {[clip:音频], [volume:音量], [fadeDuration:自然过渡时间]}
+ /// {[clip:音频], [volume:音量], [fadeDuration:自然过渡时间],
+ /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置], [audio3DMaxDistance:3D音频最大距离]}
public override void Play(AudioData audioData)
{
audioData = AudioDataInitialize(audioData);
@@ -28,6 +29,31 @@ namespace Stary.Evo.AudioCore
audioSource1 = audioSourcePool.GetAudioSource("Music");
audioSource1.clip = audioData.clip;
audioSource1.volume = audioData.volume;
+
+ // 设置2D与3D音频
+ if (audioData.is3DAudio)
+ {
+ audioSource1.transform.position = audioData.audio3DPosition;
+ audioSource1.spatialBlend = 1;
+ audioSource1.minDistance = 1f;
+ if (audioData.audio3DMaxDistance != 0)
+ {
+ audioSource1.maxDistance = audioData.audio3DMaxDistance;
+ }
+ else
+ {
+ // 默认3D最大距离为3米
+ audioSource1.maxDistance = 3f;
+ }
+ }
+ else
+ {
+ audioSource1.transform.position = Vector3.zero;
+ audioSource1.spatialBlend = 0;
+ audioSource1.minDistance = 1f;
+ audioSource1.maxDistance = 500f;
+ }
+
currentAudioSource = audioSource1;
currentAudioSource.Play();
FadeMusic(audioSource1, audioData.fadeDuration, audioSource2);
@@ -39,6 +65,31 @@ namespace Stary.Evo.AudioCore
audioSource2 = audioSourcePool.GetAudioSource("Music");
audioSource2.clip = audioData.clip;
audioSource2.volume = audioData.volume;
+
+ // 设置2D与3D音频
+ if (audioData.is3DAudio)
+ {
+ audioSource2.transform.position = audioData.audio3DPosition;
+ audioSource2.spatialBlend = 1;
+ audioSource2.minDistance = 1f;
+ if (audioData.audio3DMaxDistance != 0)
+ {
+ audioSource2.maxDistance = audioData.audio3DMaxDistance;
+ }
+ else
+ {
+ // 默认3D最大距离为3米
+ audioSource2.maxDistance = 3f;
+ }
+ }
+ else
+ {
+ audioSource2.transform.position = Vector3.zero;
+ audioSource2.spatialBlend = 0;
+ audioSource2.minDistance = 1f;
+ audioSource2.maxDistance = 500f;
+ }
+
currentAudioSource = audioSource2;
currentAudioSource.Play();
FadeMusic(audioSource2, audioData.fadeDuration, audioSource1);
diff --git a/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs b/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs
index 6674340..f9842d5 100644
--- a/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs
+++ b/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs
@@ -18,7 +18,8 @@ namespace Stary.Evo.AudioCore
/// 播放音效
///
/// {[clip:音频], [volume:音量],
- /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间],
+ /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置], [audio3DMaxDistance:3D音频最大距离]}
public override void Play(AudioData audioData)
{
audioData = AudioDataInitialize(audioData);
@@ -33,6 +34,30 @@ namespace Stary.Evo.AudioCore
source.clip = audioData.clip;
source.volume = audioData.volume;
+
+ // 设置2D与3D音频
+ if (audioData.is3DAudio)
+ {
+ source.transform.position = audioData.audio3DPosition;
+ source.spatialBlend = 1;
+ source.minDistance = 1f;
+ if (audioData.audio3DMaxDistance != 0)
+ {
+ source.maxDistance = audioData.audio3DMaxDistance;
+ }
+ else
+ {
+ // 默认3D最大距离为3米
+ source.maxDistance = 3f;
+ }
+ }
+ else
+ {
+ source.transform.position = Vector3.zero;
+ source.spatialBlend = 0;
+ source.minDistance = 1f;
+ source.maxDistance = 500f;
+ }
source.Play();
// 将 AudioSource 加入活动列表
diff --git a/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs b/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs
index 5572423..a4038f8 100644
--- a/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs
+++ b/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs
@@ -21,7 +21,9 @@ namespace Stary.Evo.AudioCore
/// 播放语音
///
/// {[clip:音频], [volume:音量],
- /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间],
+ /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置],
+ /// [audio3DMaxDistance:3D音频最大距离]}
public override void Play(AudioData audioData)
{
// 停止当前正在播放的语音与旧协程,或旧异步
@@ -39,6 +41,31 @@ namespace Stary.Evo.AudioCore
currentSource.clip = audioData.clip;
currentSource.volume = audioData.volume;
+
+ // 设置2D与3D音频
+ if (audioData.is3DAudio)
+ {
+ currentSource.transform.position = audioData.audio3DPosition;
+ currentSource.spatialBlend = 1;
+ currentSource.minDistance = 1f;
+ if (audioData.audio3DMaxDistance != 0)
+ {
+ currentSource.maxDistance = audioData.audio3DMaxDistance;
+ }
+ else
+ {
+ // 默认3D最大距离为3米
+ currentSource.maxDistance = 3f;
+ }
+ }
+ else
+ {
+ currentSource.transform.position = Vector3.zero;
+ currentSource.spatialBlend = 0;
+ currentSource.minDistance = 1f;
+ currentSource.maxDistance = 500f;
+ }
+
currentSource.Play();
// 使用协程处理延迟和回调
@@ -76,9 +103,11 @@ namespace Stary.Evo.AudioCore
///
/// 异步播放语音
///
- ///
- ///
- public async Task Play(AudioClip audioClip, float volume)
+ /// {[clip:音频], [volume:音量],
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间],
+ /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置],
+ /// [audio3DMaxDistance:3D音频最大距离]}
+ public async Task PlayAsync(AudioData audioData)
{
// 停止当前正在播放的语音与旧协程,或旧异步
Stop();
@@ -86,12 +115,35 @@ namespace Stary.Evo.AudioCore
currentSource = audioSourcePool.GetAudioSource("Voice");
if (currentSource == null) return;
- currentSource.clip = audioClip;
- currentSource.volume = volume;
+ currentSource.clip = audioData.clip;
+ currentSource.volume = audioData.volume;
+
+ // 设置2D与3D音频
+ if (audioData.is3DAudio)
+ {
+ currentSource.transform.position = audioData.audio3DPosition;
+ currentSource.spatialBlend = 1;
+ currentSource.minDistance = 1f;
+ if (audioData.audio3DMaxDistance != 0)
+ {
+ currentSource.maxDistance = audioData.audio3DMaxDistance;
+ }
+ else
+ {
+ // 默认3D最大距离为3米
+ currentSource.maxDistance = 3f;
+ }
+ }
+ else
+ {
+ currentSource.transform.position = Vector3.zero;
+ currentSource.spatialBlend = 0;
+ currentSource.minDistance = 1f;
+ currentSource.maxDistance = 500f;
+ }
currentSource.Play();
-
cancelTokenSource = new CancellationTokenSource();
- await Task.Delay(TimeSpan.FromSeconds(audioClip.length),cancelTokenSource.Token);
+ await Task.Delay(TimeSpan.FromSeconds(audioData.clip.length),cancelTokenSource.Token);
}
///
diff --git a/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs b/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs
index 71563da..a17ed43 100644
--- a/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs
+++ b/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs
@@ -27,7 +27,9 @@ namespace Stary.Evo.AudioCore
/// 播放语音
///
/// {[clip:音频], [volume:音量],
- /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间],
+ /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置],
+ /// [audio3DMaxDistance:3D音频最大距离]}
public static void PlayVoice(AudioData audioData)
{
if(Voice == null) Initialize();
@@ -37,13 +39,15 @@ namespace Stary.Evo.AudioCore
///
/// 异步播放语音
///
- ///
- ///
+ /// {[clip:音频], [volume:音量],
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间],
+ /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置],
+ /// [audio3DMaxDistance:3D音频最大距离]}
///
- public static Task PlayVoice(AudioClip audioClip, float volume = 1f)
+ public static Task PlayAsyncVoice(AudioData audioData)
{
if(Voice == null) Initialize();
- return Voice.Play(audioClip, volume);
+ return Voice.PlayAsync(audioData);
}
///
@@ -63,7 +67,9 @@ namespace Stary.Evo.AudioCore
/// 播放音效
///
/// {[clip:音频], [volume:音量],
- /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}
+ /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间],
+ /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置],
+ /// [audio3DMaxDistance:3D音频最大距离]}
public static void PlaySFX(AudioData audioData)
{
if(SFX == null) Initialize();
@@ -87,10 +93,12 @@ namespace Stary.Evo.AudioCore
///
/// 播放背景音乐
///
- /// {[clip:音频], [volume:音量], [fadeDuration:自然过渡时间]}
+ /// {[clip:音频], [volume:音量], [fadeDuration:自然过渡时间],
+ /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置],
+ /// [audio3DMaxDistance:3D音频最大距离]}
public static void PlayMusic(AudioData audioData)
{
- if(CoroutineHelper.coroutineRunner == null) Initialize();
+ if(Music == null) Initialize();
Music.Play(audioData);
}
diff --git a/Assets/04.AudioCore/package.json b/Assets/04.AudioCore/package.json
index fc75df0..51fb4e7 100644
--- a/Assets/04.AudioCore/package.json
+++ b/Assets/04.AudioCore/package.json
@@ -1,6 +1,6 @@
{
"name": "com.staryevo.audiocore",
- "version": "1.0.14",
+ "version": "1.0.15",
"displayName": "04.AudioCore",
"description": "音频播放工具",
"unity": "2021.3",
From 50f3d2078bd67dde7feef24a7a8ba049e1e6beca Mon Sep 17 00:00:00 2001
From: Han <1985708279@qq.com>
Date: Tue, 22 Jul 2025 11:06:30 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E3=80=90m=E3=80=91=E6=92=AD=E6=94=BE?=
=?UTF-8?q?=E9=9F=B3=E4=B9=90=E5=88=9D=E5=A7=8B=E8=AE=BE=E7=BD=AE=E9=9F=B3?=
=?UTF-8?q?=E9=87=8F=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98=E8=A7=A3=E5=86=B3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Assets/04.AudioCore/RunTime/Abstract/IAudio.cs | 5 +++++
Assets/04.AudioCore/package.json | 2 +-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs b/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs
index c5f639f..0c10290 100644
--- a/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs
+++ b/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs
@@ -88,6 +88,11 @@ namespace Stary.Evo.AudioCore
{
audioData.volume = 1f;
}
+
+ if (audioData.fadeDuration == 0)
+ {
+ audioData.fadeDuration = 1f;
+ }
return audioData;
}
}
diff --git a/Assets/04.AudioCore/package.json b/Assets/04.AudioCore/package.json
index 51fb4e7..552ba80 100644
--- a/Assets/04.AudioCore/package.json
+++ b/Assets/04.AudioCore/package.json
@@ -1,6 +1,6 @@
{
"name": "com.staryevo.audiocore",
- "version": "1.0.15",
+ "version": "1.0.16",
"displayName": "04.AudioCore",
"description": "音频播放工具",
"unity": "2021.3",