feat: AudioSettings 独立出配置文件,而不是零散在代码各处。

This commit is contained in:
2026-05-14 20:22:00 +08:00
parent 892689fed5
commit 6cd802ba3a
13 changed files with 251 additions and 60 deletions
@@ -14,9 +14,7 @@ namespace OCES.Audio
public class SfxSystem : MonoBehaviour
{
public UnityEngine.UI.Text audioSystemTextBox;
const int k_maxGlobalConcurrent = 128;
//记录某个 AudioObject 最近一次触发播放的时刻,用于 MinInterval 节流判断,是"上次什么时候播过"。
readonly Dictionary<uint, double> m_lastPlayTime = new();
readonly Dictionary<uint, int> m_clipConcurrentCount = new();
@@ -78,11 +76,11 @@ namespace OCES.Audio
this.m_pitchStepResolver = new PitchStepResolver();
this.m_volumeStepResolver = new VolumeStepResolver();
AudioMixerGroup[] sfx = Find("Master/Regular/SFX");
AudioMixerGroup[] sfx = Find(AudioExtendSettings.Instance.sfxGroupPath);
if (sfx.Length > 0) this.m_sfxGroup = sfx[0];
AudioMixerGroup[] voice = Find("Master/Regular/Voice");
AudioMixerGroup[] voice = Find(AudioExtendSettings.Instance.voiceGroupPath);
if (voice.Length > 0) this.m_voiceGroup = voice[0];
AudioMixerGroup[] accentSfx = Find("Master/SFX_Accent");
AudioMixerGroup[] accentSfx = Find(AudioExtendSettings.Instance.accentSfxGroupPath);
if (accentSfx.Length > 0) this.m_accentSfxGroup = accentSfx[0];
return;
@@ -224,7 +222,8 @@ namespace OCES.Audio
}
// 第四层:全局并发控制
if (this.m_activeSounds.Count >= k_maxGlobalConcurrent)
//从Unity原生Audio Settings中读取最大发音数限制
if (this.m_activeSounds.Count >= AudioSettings.GetConfiguration().numVirtualVoices)
{
this.m_tempLowerPriority.Clear();
foreach (ActiveSound activeSound in this.m_activeSounds)
@@ -405,7 +404,9 @@ namespace OCES.Audio
bool SetupSource(AudioSource source, ActiveSound activeSound, int clipIndex = 0)
{
AudioObject audioObject = activeSound.AudioObject;
AudioClip clip = AudioSystem.Instance.ResourceLoader.LoadSync<AudioClip>($"Audios/{audioObject.Name[clipIndex]}");
AudioClip clip =
AudioSystem.Instance.ResourceLoader.LoadSync<AudioClip>(
$"{AudioExtendSettings.Instance.audioResourcePath}/{audioObject.Name[clipIndex]}");
if (!clip)
{
Debug.LogError($"音频文件未找到:{audioObject.Name[clipIndex]}");