feat: AudioSettings 独立出配置文件,而不是零散在代码各处。
This commit is contained in:
@@ -19,9 +19,8 @@ namespace OCES.Audio
|
||||
public enum ConsoleLogLevel { Off, Log, Warning, Error } //TODO 实现这个功能
|
||||
|
||||
internal ResourceLoader ResourceLoader;
|
||||
|
||||
const string k_audioConfigPath = "AudioData";
|
||||
const string k_audioResourcePath = "Audios";
|
||||
|
||||
[SerializeField] AudioExtendSettings extendSettings;
|
||||
|
||||
SfxSystem m_sfxSystem;
|
||||
MusicSystem m_musicSystem;
|
||||
@@ -99,14 +98,16 @@ namespace OCES.Audio
|
||||
|
||||
public void SetLowpass(bool enable)
|
||||
{
|
||||
float target = enable ? 440f : 22000f;
|
||||
float target = enable
|
||||
? AudioExtendSettings.Instance.lowpassEnabledCutoff
|
||||
: AudioExtendSettings.Instance.lowpassDisabledCutoff;
|
||||
|
||||
// Kill existing tween to avoid stacking
|
||||
if (this.m_lowpassTween != null && this.m_lowpassTween.IsActive())
|
||||
this.m_lowpassTween.Kill();
|
||||
|
||||
// Get current value as start
|
||||
if (!this.m_mixer.GetFloat("LowpassFreq", out float current))
|
||||
if (!this.m_mixer.GetFloat(AudioExtendSettings.Instance.lowpassParamName, out float current))
|
||||
current = target;
|
||||
|
||||
float startLog = Mathf.Log10(current);
|
||||
@@ -118,10 +119,10 @@ namespace OCES.Audio
|
||||
{
|
||||
startLog = x;
|
||||
float value = Mathf.Pow(10f, startLog);
|
||||
this.m_mixer.SetFloat("LowpassFreq", value);
|
||||
this.m_mixer.SetFloat(AudioExtendSettings.Instance.lowpassParamName, value);
|
||||
},
|
||||
endLog,
|
||||
0.2f // duration in seconds
|
||||
AudioExtendSettings.Instance.lowpassTweenDuration // duration in seconds
|
||||
).SetEase(Ease.OutCubic);
|
||||
}
|
||||
|
||||
@@ -275,6 +276,8 @@ namespace OCES.Audio
|
||||
|
||||
void Awake()
|
||||
{
|
||||
AudioExtendSettings.Instance = this.extendSettings;
|
||||
|
||||
if ((bool)Instance && Instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
@@ -284,28 +287,30 @@ namespace OCES.Audio
|
||||
DontDestroyOnLoad(gameObject);
|
||||
|
||||
this.ResourceLoader = gameObject.AddComponent<ResourceLoader>();
|
||||
|
||||
string audioConfigPath = AudioExtendSettings.Instance.audioConfigPath;
|
||||
|
||||
this.m_mixer = this.ResourceLoader.LoadSync<AudioMixer>("Audios/Master");
|
||||
this.m_mixer = this.ResourceLoader.LoadSync<AudioMixer>(AudioExtendSettings.Instance.audioMixerPath);
|
||||
|
||||
// ── SFX 调度器 ──
|
||||
// AudioSystem.cs 中
|
||||
GameObject sfxPoolRoot = new("SfxSourcePool");
|
||||
sfxPoolRoot.transform.SetParent(transform, false);
|
||||
AudioSourcePool sfxPool = new(sfxPoolRoot.transform); // 不传 mixer group,让 SfxSystem 自己设置
|
||||
AudioSourcePool sfxPool = new(sfxPoolRoot.transform);
|
||||
this.m_sfxSystem = gameObject.AddComponent<SfxSystem>();
|
||||
this.m_audioObjects = AudioConfigLoader.Load<AudioObjectConfig>($"{k_audioConfigPath}/AudioObject");
|
||||
this.m_audioObjects = AudioConfigLoader.Load<AudioObjectConfig>($"{audioConfigPath}/AudioObject");
|
||||
this.m_audioObjects.PreParseSwitchMappings();
|
||||
this.m_groups = AudioConfigLoader.Load<AudioGroupConfig>($"{k_audioConfigPath}/AudioGroup");
|
||||
this.m_sfxSystem.Initialize(this.m_groups, this.m_mixer, sfxPool); // 传入 pool
|
||||
this.m_groups = AudioConfigLoader.Load<AudioGroupConfig> ($"{audioConfigPath}/AudioGroup");
|
||||
this.m_sfxSystem.Initialize(this.m_groups, this.m_mixer, sfxPool);
|
||||
|
||||
|
||||
// ── 音乐与环境音系统 ──
|
||||
var segments = AudioConfigLoader.Load<MusicSegmentConfig>($"{k_audioConfigPath}/MusicSegment");
|
||||
var containers = AudioConfigLoader.Load<MusicContainerConfig>($"{k_audioConfigPath}/MusicContainer");
|
||||
var musicPaths = AudioConfigLoader.Load<MusicPathConfig>($"{k_audioConfigPath}/MusicPath");
|
||||
var ambiencePaths = AudioConfigLoader.Load<AmbiencePathConfig>($"{k_audioConfigPath}/AmbiencePath");
|
||||
var musicTransitions = AudioConfigLoader.Load<MusicTransitionConfig>($"{k_audioConfigPath}/MusicTransition");
|
||||
var ambienceTransitions = AudioConfigLoader.Load<AmbienceTransitionConfig>($"{k_audioConfigPath}/AmbienceTransition");
|
||||
var segments = AudioConfigLoader.Load<MusicSegmentConfig> ($"{audioConfigPath}/MusicSegment");
|
||||
var containers = AudioConfigLoader.Load<MusicContainerConfig> ($"{audioConfigPath}/MusicContainer");
|
||||
var musicPaths = AudioConfigLoader.Load<MusicPathConfig> ($"{audioConfigPath}/MusicPath");
|
||||
var ambiencePaths = AudioConfigLoader.Load<AmbiencePathConfig> ($"{audioConfigPath}/AmbiencePath");
|
||||
var musicTransitions = AudioConfigLoader.Load<MusicTransitionConfig> ($"{audioConfigPath}/MusicTransition");
|
||||
var ambienceTransitions = AudioConfigLoader.Load<AmbienceTransitionConfig> ($"{audioConfigPath}/AmbienceTransition");
|
||||
|
||||
//运行时数据验证
|
||||
segments.Validate();
|
||||
@@ -317,12 +322,12 @@ namespace OCES.Audio
|
||||
// AudioSourcePool 由 MusicSystem 独占一个子节点,与 SFX pool 隔离
|
||||
GameObject musicPoolRoot = new("MusicSourcePool");
|
||||
musicPoolRoot.transform.SetParent(transform, false);
|
||||
AudioMixerGroup musicGroup = this.m_mixer.FindMatchingGroups("Master/Regular/Music")[0];
|
||||
AudioMixerGroup musicGroup = this.m_mixer.FindMatchingGroups(AudioExtendSettings.Instance.musicGroupPath)[0];
|
||||
AudioSourcePool musicPool = new(musicPoolRoot.transform, musicGroup);
|
||||
|
||||
GameObject ambiencePoolRoot = new("AmbienceSourcePool");
|
||||
ambiencePoolRoot.transform.SetParent(transform, false);
|
||||
AudioMixerGroup ambienceGroup = this.m_mixer.FindMatchingGroups("Master/Regular/SFX/Ambience")[0];
|
||||
AudioMixerGroup ambienceGroup = this.m_mixer.FindMatchingGroups(AudioExtendSettings.Instance.ambienceGroupPath)[0];
|
||||
AudioSourcePool ambiencePool = new(ambiencePoolRoot.transform, ambienceGroup);
|
||||
|
||||
this.m_musicSystem.Initialize(
|
||||
@@ -429,4 +434,4 @@ namespace OCES.Audio
|
||||
return default;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user