From f3a83eb9094c8c46133808784c5869b32aac6907 Mon Sep 17 00:00:00 2001 From: ThomasCharester Date: Sun, 23 Nov 2025 01:39:08 +0300 Subject: [PATCH] AudioSourceConfig --- .../Assets/Code/App/BootstrapInstaller.cs | 3 ++- .../Assets/Code/Audio/AudioService.cs | 13 +++++++----- .../Assets/Code/Audio/AudioSourcePool.cs | 20 ++++++++++++------- .../Assets/Code/Audio/AudioSourceType.cs | 8 ++++++++ .../Assets/Code/Audio/AudioSourceType.cs.meta | 3 +++ .../Code/Configs/AudioSourceSettingsConfig.cs | 14 +++++++++++++ .../Configs/AudioSourceSettingsConfig.cs.meta | 3 +++ .../Code/StaticData/IStaticDataService.cs | 2 ++ .../Code/StaticData/StaticDataService.cs | 18 ++++++++++++----- .../Resources/Configs/Audio/Full3D.asset | 16 +++++++++++++++ .../Resources/Configs/Audio/Full3D.asset.meta | 8 ++++++++ .../Resources/Configs/Audio/NoBlend.asset | 16 +++++++++++++++ .../Configs/Audio/NoBlend.asset.meta | 8 ++++++++ 13 files changed, 114 insertions(+), 18 deletions(-) create mode 100644 Game/CourierOld/Assets/Code/Audio/AudioSourceType.cs create mode 100644 Game/CourierOld/Assets/Code/Audio/AudioSourceType.cs.meta create mode 100644 Game/CourierOld/Assets/Code/Configs/AudioSourceSettingsConfig.cs create mode 100644 Game/CourierOld/Assets/Code/Configs/AudioSourceSettingsConfig.cs.meta create mode 100644 Game/CourierOld/Assets/Resources/Configs/Audio/Full3D.asset create mode 100644 Game/CourierOld/Assets/Resources/Configs/Audio/Full3D.asset.meta create mode 100644 Game/CourierOld/Assets/Resources/Configs/Audio/NoBlend.asset create mode 100644 Game/CourierOld/Assets/Resources/Configs/Audio/NoBlend.asset.meta diff --git a/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs b/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs index 2f59838..8eb2e5e 100644 --- a/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs +++ b/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs @@ -89,7 +89,8 @@ namespace Code.App containerBuilder.AddSingleton(staticDataService.SFXListConfig, typeof(SFXListConfig)); containerBuilder.AddSingleton(staticDataService.DispatcherSoundListConfig, typeof(DispatcherSoundListConfig)); containerBuilder.AddSingleton(staticDataService.EnemiesSoundListConfig, typeof(EnemiesSoundListConfig)); - + containerBuilder.AddSingleton(staticDataService.AudioSourceSettingsConfigs, typeof(Dictionary)); + containerBuilder.AddSingleton(staticDataService.OrderServiceConfig, typeof(OrderServiceConfig)); containerBuilder.AddSingleton(staticDataService.OrderBoxConfig, typeof(OrderBoxConfig)); } diff --git a/Game/CourierOld/Assets/Code/Audio/AudioService.cs b/Game/CourierOld/Assets/Code/Audio/AudioService.cs index d9926ea..477cdc1 100644 --- a/Game/CourierOld/Assets/Code/Audio/AudioService.cs +++ b/Game/CourierOld/Assets/Code/Audio/AudioService.cs @@ -31,13 +31,16 @@ namespace Code.Audio _courierGroup, _enemiesGroup; - private readonly AudioSourcePool _audioSourcePool = new(); + private readonly AudioSourcePool _audioSourcePool; private Dictionary _snapshots = new(); - - public AudioService(IAudioFactory audioFactory) + private Dictionary _settings; + + public AudioService(IAudioFactory audioFactory, Dictionary settings) { _audioFactory = audioFactory; + _audioSourcePool = new(settings); + _settings = settings; } public async UniTask Initialize() @@ -86,7 +89,7 @@ namespace Code.Audio if(!_musicAudioSources[musicType]) { _musicAudioSources[musicType] = _audioSourcePool.GetSource(); - _musicAudioSources[musicType].spatialBlend = 0f; + _musicAudioSources[musicType].spatialBlend = _settings[AudioSourceType.NoBlend].spatialBlend; _musicAudioSources[musicType].outputAudioMixerGroup = _musicAudioGroups[musicType]; } @@ -169,7 +172,7 @@ namespace Code.Audio public void PlayDispatcher(DispatcherSounds dispatcherSoundId) { OnDispatcherStarted?.Invoke(); - _audioSourcePool.PlayShizo(_audioFactory.DispatcherAudios[(int)dispatcherSoundId], _dispatcherGroup, () => OnDispatcherEnded?.Invoke()); + _audioSourcePool.PlayOneShot(_audioFactory.DispatcherAudios[(int)dispatcherSoundId], _dispatcherGroup, AudioSourceType.NoBlend, () => OnDispatcherEnded?.Invoke()); } } } \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Audio/AudioSourcePool.cs b/Game/CourierOld/Assets/Code/Audio/AudioSourcePool.cs index 74a89ef..5536a11 100644 --- a/Game/CourierOld/Assets/Code/Audio/AudioSourcePool.cs +++ b/Game/CourierOld/Assets/Code/Audio/AudioSourcePool.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using Code.Configs; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.Audio; @@ -12,7 +14,11 @@ namespace Code.Audio // The pool holds plain GameObjects (you can swap this for any component type). private IObjectPool _pool; private GameObject _sourcePrefab; - + + private Dictionary _settings; + + public AudioSourcePool(Dictionary settings) => _settings = settings; + public void Initialize(GameObject sourcePrefab) { _sourcePrefab = sourcePrefab; @@ -56,12 +62,12 @@ namespace Code.Audio { Object.Destroy(source.gameObject); } - - public async UniTaskVoid PlayOneShot(AudioClip clip, Vector3 position, AudioMixerGroup audioMixerGroup, Action onComplete = null) + + public async UniTaskVoid PlayOneShot(AudioClip clip, Vector3 position, AudioMixerGroup audioMixerGroup, AudioSourceType audioSourceType = AudioSourceType.NoBlend, Action onComplete = null) { AudioSource source = _pool.Get(); source.PlayOneShot(clip); - source.spatialBlend = 1f; + source.spatialBlend = _settings[audioSourceType].spatialBlend; source.transform.position = position; source.outputAudioMixerGroup = audioMixerGroup; @@ -69,17 +75,17 @@ namespace Code.Audio onComplete?.Invoke(); _pool.Release(source); } - public async UniTaskVoid PlayShizo(AudioClip clip, AudioMixerGroup audioMixerGroup, Action onComplete = null) + public async UniTaskVoid PlayOneShot(AudioClip clip, AudioMixerGroup audioMixerGroup, AudioSourceType audioSourceType = AudioSourceType.NoBlend, Action onComplete = null) { AudioSource source = _pool.Get(); source.PlayOneShot(clip); - source.spatialBlend = 0f; + source.spatialBlend = _settings[audioSourceType].spatialBlend; source.outputAudioMixerGroup = audioMixerGroup; await UniTask.WaitUntilValueChanged(source, x => x.isPlaying); onComplete?.Invoke(); _pool.Release(source); - } + } public AudioSource GetSource() => _pool.Get(); public void ReleaseSource(AudioSource source) => _pool.Release(source); } diff --git a/Game/CourierOld/Assets/Code/Audio/AudioSourceType.cs b/Game/CourierOld/Assets/Code/Audio/AudioSourceType.cs new file mode 100644 index 0000000..93790cb --- /dev/null +++ b/Game/CourierOld/Assets/Code/Audio/AudioSourceType.cs @@ -0,0 +1,8 @@ +namespace Code.Audio +{ + public enum AudioSourceType + { + Full3D, + NoBlend + } +} \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Audio/AudioSourceType.cs.meta b/Game/CourierOld/Assets/Code/Audio/AudioSourceType.cs.meta new file mode 100644 index 0000000..3ae736a --- /dev/null +++ b/Game/CourierOld/Assets/Code/Audio/AudioSourceType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 260bbb19b55049928b9ab4d55b32fc3f +timeCreated: 1763849966 \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Configs/AudioSourceSettingsConfig.cs b/Game/CourierOld/Assets/Code/Configs/AudioSourceSettingsConfig.cs new file mode 100644 index 0000000..94f67a0 --- /dev/null +++ b/Game/CourierOld/Assets/Code/Configs/AudioSourceSettingsConfig.cs @@ -0,0 +1,14 @@ +using Code.Audio; +using UnityEngine; + +namespace Code.Configs +{ + [CreateAssetMenu(fileName = "AudioSourceSettingsConfig", menuName = "Audio/AudioSourceSettingsConfig")] + public class AudioSourceSettingsConfig : ScriptableObject + { + // Дополнять по мере необходимости + public float spatialBlend; + + public AudioSourceType sourceType; + } +} \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Configs/AudioSourceSettingsConfig.cs.meta b/Game/CourierOld/Assets/Code/Configs/AudioSourceSettingsConfig.cs.meta new file mode 100644 index 0000000..af82cbe --- /dev/null +++ b/Game/CourierOld/Assets/Code/Configs/AudioSourceSettingsConfig.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e6406ab390b74d5ca336d7d4d0e1a732 +timeCreated: 1763850008 \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/StaticData/IStaticDataService.cs b/Game/CourierOld/Assets/Code/StaticData/IStaticDataService.cs index bae0d62..9e1063e 100644 --- a/Game/CourierOld/Assets/Code/StaticData/IStaticDataService.cs +++ b/Game/CourierOld/Assets/Code/StaticData/IStaticDataService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using Code.Audio; using Code.Configs; using Code.Gameplay.Camera; using Cysharp.Threading.Tasks; @@ -25,6 +26,7 @@ namespace Code.StaticData OrderServiceConfig OrderServiceConfig { get; } OrderBoxConfig OrderBoxConfig { get; } Dictionary CameraSettingsConfigs { get; } + Dictionary AudioSourceSettingsConfigs { get; } void Load(); Task InstantiateAsset(AssetReference assetReference) where T : Behaviour; } diff --git a/Game/CourierOld/Assets/Code/StaticData/StaticDataService.cs b/Game/CourierOld/Assets/Code/StaticData/StaticDataService.cs index c9d10ad..f80f30d 100644 --- a/Game/CourierOld/Assets/Code/StaticData/StaticDataService.cs +++ b/Game/CourierOld/Assets/Code/StaticData/StaticDataService.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Code.Audio; using Code.Configs; using Code.Constants; using Code.Gameplay.Camera; @@ -27,7 +28,9 @@ namespace Code.StaticData public OrderBoxConfig OrderBoxConfig { get; private set; } public Dictionary CameraSettingsConfigs { get; private set; } = new(); - + + public Dictionary AudioSourceSettingsConfigs { get; private set; } = new(); + public void Load() { InputConfig = Resources.Load(string.Format(StringPaths.ConfigSingle, "App", "InputConfig")); @@ -37,10 +40,12 @@ namespace Code.StaticData PlayerConfig = Resources.Load(string.Format(StringPaths.ConfigSingle, "App", "PlayerConfig")); OrderServiceConfig = Resources.Load(string.Format(StringPaths.ConfigSingle, "Gameplay", "OrderServiceConfig")); OrderBoxConfig = Resources.Load(string.Format(StringPaths.ConfigSingle, "Gameplay", "OrderBoxConfig")); - + CameraConfig = Resources.Load(string.Format(StringPaths.ConfigSingle, "Camera", "CameraConfig")); - CameraSettingsConfigs = Resources.LoadAll(string.Format(StringPaths.ConfigMultiple, "Camera")).ToDictionary(x=> x.cameraMode); - + CameraSettingsConfigs = Resources + .LoadAll(string.Format(StringPaths.ConfigMultiple, "Camera")) + .ToDictionary(x => x.cameraMode); + LoadAudioConfigs(); } @@ -51,11 +56,14 @@ namespace Code.StaticData SFXListConfig = Resources.Load(string.Format(StringPaths.ConfigSingle, "Audio", "SFXListConfig")); DispatcherSoundListConfig = Resources.Load(string.Format(StringPaths.ConfigSingle, "Audio", "DispatcherSoundListConfig")); EnemiesSoundListConfig = Resources.Load(string.Format(StringPaths.ConfigSingle, "Audio", "EnemiesSoundListConfig")); + AudioSourceSettingsConfigs = Resources + .LoadAll(string.Format(StringPaths.ConfigMultiple, "Audio")) + .ToDictionary(x => x.sourceType); } public async Task InstantiateAsset(AssetReference assetReference) where T : Behaviour { return (await Addressables.InstantiateAsync(assetReference).ToUniTask()).GetComponent(); - } + } } } \ No newline at end of file diff --git a/Game/CourierOld/Assets/Resources/Configs/Audio/Full3D.asset b/Game/CourierOld/Assets/Resources/Configs/Audio/Full3D.asset new file mode 100644 index 0000000..7298e62 --- /dev/null +++ b/Game/CourierOld/Assets/Resources/Configs/Audio/Full3D.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e6406ab390b74d5ca336d7d4d0e1a732, type: 3} + m_Name: Full3D + m_EditorClassIdentifier: Assembly-CSharp::Code.Configs.AudioSourceSettingsConfig + spatialBlend: 1 + sourceType: 0 diff --git a/Game/CourierOld/Assets/Resources/Configs/Audio/Full3D.asset.meta b/Game/CourierOld/Assets/Resources/Configs/Audio/Full3D.asset.meta new file mode 100644 index 0000000..e5b9090 --- /dev/null +++ b/Game/CourierOld/Assets/Resources/Configs/Audio/Full3D.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 058f1d54faced1a488eff486612f38e5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Game/CourierOld/Assets/Resources/Configs/Audio/NoBlend.asset b/Game/CourierOld/Assets/Resources/Configs/Audio/NoBlend.asset new file mode 100644 index 0000000..e88c4dc --- /dev/null +++ b/Game/CourierOld/Assets/Resources/Configs/Audio/NoBlend.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e6406ab390b74d5ca336d7d4d0e1a732, type: 3} + m_Name: NoBlend + m_EditorClassIdentifier: Assembly-CSharp::Code.Configs.AudioSourceSettingsConfig + spatialBlend: 0 + sourceType: 1 diff --git a/Game/CourierOld/Assets/Resources/Configs/Audio/NoBlend.asset.meta b/Game/CourierOld/Assets/Resources/Configs/Audio/NoBlend.asset.meta new file mode 100644 index 0000000..8161a5d --- /dev/null +++ b/Game/CourierOld/Assets/Resources/Configs/Audio/NoBlend.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 86857ed7de331464dacb1a95b66b970d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: