AudioSourceConfig
This commit is contained in:
1 parent
35f703a8d2
commit
f3a83eb909
13 files changed
+105
-9
No files matched your search
@@ -89,6 +89,7 @@ namespace Code.App
|
|||||||
containerBuilder.AddSingleton(staticDataService.SFXListConfig, typeof(SFXListConfig));
|
containerBuilder.AddSingleton(staticDataService.SFXListConfig, typeof(SFXListConfig));
|
||||||
containerBuilder.AddSingleton(staticDataService.DispatcherSoundListConfig, typeof(DispatcherSoundListConfig));
|
containerBuilder.AddSingleton(staticDataService.DispatcherSoundListConfig, typeof(DispatcherSoundListConfig));
|
||||||
containerBuilder.AddSingleton(staticDataService.EnemiesSoundListConfig, typeof(EnemiesSoundListConfig));
|
containerBuilder.AddSingleton(staticDataService.EnemiesSoundListConfig, typeof(EnemiesSoundListConfig));
|
||||||
|
containerBuilder.AddSingleton(staticDataService.AudioSourceSettingsConfigs, typeof(Dictionary<AudioSourceType, AudioSourceSettingsConfig>));
|
||||||
|
|
||||||
containerBuilder.AddSingleton(staticDataService.OrderServiceConfig, typeof(OrderServiceConfig));
|
containerBuilder.AddSingleton(staticDataService.OrderServiceConfig, typeof(OrderServiceConfig));
|
||||||
containerBuilder.AddSingleton(staticDataService.OrderBoxConfig, typeof(OrderBoxConfig));
|
containerBuilder.AddSingleton(staticDataService.OrderBoxConfig, typeof(OrderBoxConfig));
|
||||||
|
|||||||
@@ -31,13 +31,16 @@ namespace Code.Audio
|
|||||||
_courierGroup,
|
_courierGroup,
|
||||||
_enemiesGroup;
|
_enemiesGroup;
|
||||||
|
|
||||||
private readonly AudioSourcePool _audioSourcePool = new();
|
private readonly AudioSourcePool _audioSourcePool;
|
||||||
|
|
||||||
private Dictionary<AudioSnapshotState, AudioMixerSnapshot> _snapshots = new();
|
private Dictionary<AudioSnapshotState, AudioMixerSnapshot> _snapshots = new();
|
||||||
|
private Dictionary<AudioSourceType, AudioSourceSettingsConfig> _settings;
|
||||||
|
|
||||||
public AudioService(IAudioFactory audioFactory)
|
public AudioService(IAudioFactory audioFactory, Dictionary<AudioSourceType,AudioSourceSettingsConfig> settings)
|
||||||
{
|
{
|
||||||
_audioFactory = audioFactory;
|
_audioFactory = audioFactory;
|
||||||
|
_audioSourcePool = new(settings);
|
||||||
|
_settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async UniTask Initialize()
|
public async UniTask Initialize()
|
||||||
@@ -86,7 +89,7 @@ namespace Code.Audio
|
|||||||
if(!_musicAudioSources[musicType])
|
if(!_musicAudioSources[musicType])
|
||||||
{
|
{
|
||||||
_musicAudioSources[musicType] = _audioSourcePool.GetSource();
|
_musicAudioSources[musicType] = _audioSourcePool.GetSource();
|
||||||
_musicAudioSources[musicType].spatialBlend = 0f;
|
_musicAudioSources[musicType].spatialBlend = _settings[AudioSourceType.NoBlend].spatialBlend;
|
||||||
_musicAudioSources[musicType].outputAudioMixerGroup = _musicAudioGroups[musicType];
|
_musicAudioSources[musicType].outputAudioMixerGroup = _musicAudioGroups[musicType];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,7 +172,7 @@ namespace Code.Audio
|
|||||||
public void PlayDispatcher(DispatcherSounds dispatcherSoundId)
|
public void PlayDispatcher(DispatcherSounds dispatcherSoundId)
|
||||||
{
|
{
|
||||||
OnDispatcherStarted?.Invoke();
|
OnDispatcherStarted?.Invoke();
|
||||||
_audioSourcePool.PlayShizo(_audioFactory.DispatcherAudios[(int)dispatcherSoundId], _dispatcherGroup, () => OnDispatcherEnded?.Invoke());
|
_audioSourcePool.PlayOneShot(_audioFactory.DispatcherAudios[(int)dispatcherSoundId], _dispatcherGroup, AudioSourceType.NoBlend, () => OnDispatcherEnded?.Invoke());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Code.Configs;
|
||||||
using Cysharp.Threading.Tasks;
|
using Cysharp.Threading.Tasks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Audio;
|
using UnityEngine.Audio;
|
||||||
@@ -13,6 +15,10 @@ namespace Code.Audio
|
|||||||
private IObjectPool<AudioSource> _pool;
|
private IObjectPool<AudioSource> _pool;
|
||||||
private GameObject _sourcePrefab;
|
private GameObject _sourcePrefab;
|
||||||
|
|
||||||
|
private Dictionary<AudioSourceType, AudioSourceSettingsConfig> _settings;
|
||||||
|
|
||||||
|
public AudioSourcePool(Dictionary<AudioSourceType, AudioSourceSettingsConfig> settings) => _settings = settings;
|
||||||
|
|
||||||
public void Initialize(GameObject sourcePrefab)
|
public void Initialize(GameObject sourcePrefab)
|
||||||
{
|
{
|
||||||
_sourcePrefab = sourcePrefab;
|
_sourcePrefab = sourcePrefab;
|
||||||
@@ -57,11 +63,11 @@ namespace Code.Audio
|
|||||||
Object.Destroy(source.gameObject);
|
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();
|
AudioSource source = _pool.Get();
|
||||||
source.PlayOneShot(clip);
|
source.PlayOneShot(clip);
|
||||||
source.spatialBlend = 1f;
|
source.spatialBlend = _settings[audioSourceType].spatialBlend;
|
||||||
source.transform.position = position;
|
source.transform.position = position;
|
||||||
source.outputAudioMixerGroup = audioMixerGroup;
|
source.outputAudioMixerGroup = audioMixerGroup;
|
||||||
|
|
||||||
@@ -69,11 +75,11 @@ namespace Code.Audio
|
|||||||
onComplete?.Invoke();
|
onComplete?.Invoke();
|
||||||
_pool.Release(source);
|
_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();
|
AudioSource source = _pool.Get();
|
||||||
source.PlayOneShot(clip);
|
source.PlayOneShot(clip);
|
||||||
source.spatialBlend = 0f;
|
source.spatialBlend = _settings[audioSourceType].spatialBlend;
|
||||||
source.outputAudioMixerGroup = audioMixerGroup;
|
source.outputAudioMixerGroup = audioMixerGroup;
|
||||||
|
|
||||||
await UniTask.WaitUntilValueChanged(source, x => x.isPlaying);
|
await UniTask.WaitUntilValueChanged(source, x => x.isPlaying);
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace Code.Audio
|
||||||
|
{
|
||||||
|
public enum AudioSourceType
|
||||||
|
{
|
||||||
|
Full3D,
|
||||||
|
NoBlend
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 260bbb19b55049928b9ab4d55b32fc3f
|
||||||
|
timeCreated: 1763849966
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e6406ab390b74d5ca336d7d4d0e1a732
|
||||||
|
timeCreated: 1763850008
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Code.Audio;
|
||||||
using Code.Configs;
|
using Code.Configs;
|
||||||
using Code.Gameplay.Camera;
|
using Code.Gameplay.Camera;
|
||||||
using Cysharp.Threading.Tasks;
|
using Cysharp.Threading.Tasks;
|
||||||
@@ -25,6 +26,7 @@ namespace Code.StaticData
|
|||||||
OrderServiceConfig OrderServiceConfig { get; }
|
OrderServiceConfig OrderServiceConfig { get; }
|
||||||
OrderBoxConfig OrderBoxConfig { get; }
|
OrderBoxConfig OrderBoxConfig { get; }
|
||||||
Dictionary<CameraMode, CameraSettingsConfig> CameraSettingsConfigs { get; }
|
Dictionary<CameraMode, CameraSettingsConfig> CameraSettingsConfigs { get; }
|
||||||
|
Dictionary<AudioSourceType, AudioSourceSettingsConfig> AudioSourceSettingsConfigs { get; }
|
||||||
void Load();
|
void Load();
|
||||||
Task<T> InstantiateAsset<T>(AssetReference assetReference) where T : Behaviour;
|
Task<T> InstantiateAsset<T>(AssetReference assetReference) where T : Behaviour;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Code.Audio;
|
||||||
using Code.Configs;
|
using Code.Configs;
|
||||||
using Code.Constants;
|
using Code.Constants;
|
||||||
using Code.Gameplay.Camera;
|
using Code.Gameplay.Camera;
|
||||||
@@ -28,6 +29,8 @@ namespace Code.StaticData
|
|||||||
|
|
||||||
public Dictionary<CameraMode, CameraSettingsConfig> CameraSettingsConfigs { get; private set; } = new();
|
public Dictionary<CameraMode, CameraSettingsConfig> CameraSettingsConfigs { get; private set; } = new();
|
||||||
|
|
||||||
|
public Dictionary<AudioSourceType, AudioSourceSettingsConfig> AudioSourceSettingsConfigs { get; private set; } = new();
|
||||||
|
|
||||||
public void Load()
|
public void Load()
|
||||||
{
|
{
|
||||||
InputConfig = Resources.Load<InputConfig>(string.Format(StringPaths.ConfigSingle, "App", "InputConfig"));
|
InputConfig = Resources.Load<InputConfig>(string.Format(StringPaths.ConfigSingle, "App", "InputConfig"));
|
||||||
@@ -39,7 +42,9 @@ namespace Code.StaticData
|
|||||||
OrderBoxConfig = Resources.Load<OrderBoxConfig>(string.Format(StringPaths.ConfigSingle, "Gameplay", "OrderBoxConfig"));
|
OrderBoxConfig = Resources.Load<OrderBoxConfig>(string.Format(StringPaths.ConfigSingle, "Gameplay", "OrderBoxConfig"));
|
||||||
|
|
||||||
CameraConfig = Resources.Load<CameraConfig>(string.Format(StringPaths.ConfigSingle, "Camera", "CameraConfig"));
|
CameraConfig = Resources.Load<CameraConfig>(string.Format(StringPaths.ConfigSingle, "Camera", "CameraConfig"));
|
||||||
CameraSettingsConfigs = Resources.LoadAll<CameraSettingsConfig>(string.Format(StringPaths.ConfigMultiple, "Camera")).ToDictionary(x=> x.cameraMode);
|
CameraSettingsConfigs = Resources
|
||||||
|
.LoadAll<CameraSettingsConfig>(string.Format(StringPaths.ConfigMultiple, "Camera"))
|
||||||
|
.ToDictionary(x => x.cameraMode);
|
||||||
|
|
||||||
LoadAudioConfigs();
|
LoadAudioConfigs();
|
||||||
}
|
}
|
||||||
@@ -51,6 +56,9 @@ namespace Code.StaticData
|
|||||||
SFXListConfig = Resources.Load<SFXListConfig>(string.Format(StringPaths.ConfigSingle, "Audio", "SFXListConfig"));
|
SFXListConfig = Resources.Load<SFXListConfig>(string.Format(StringPaths.ConfigSingle, "Audio", "SFXListConfig"));
|
||||||
DispatcherSoundListConfig = Resources.Load<DispatcherSoundListConfig>(string.Format(StringPaths.ConfigSingle, "Audio", "DispatcherSoundListConfig"));
|
DispatcherSoundListConfig = Resources.Load<DispatcherSoundListConfig>(string.Format(StringPaths.ConfigSingle, "Audio", "DispatcherSoundListConfig"));
|
||||||
EnemiesSoundListConfig = Resources.Load<EnemiesSoundListConfig>(string.Format(StringPaths.ConfigSingle, "Audio", "EnemiesSoundListConfig"));
|
EnemiesSoundListConfig = Resources.Load<EnemiesSoundListConfig>(string.Format(StringPaths.ConfigSingle, "Audio", "EnemiesSoundListConfig"));
|
||||||
|
AudioSourceSettingsConfigs = Resources
|
||||||
|
.LoadAll<AudioSourceSettingsConfig>(string.Format(StringPaths.ConfigMultiple, "Audio"))
|
||||||
|
.ToDictionary(x => x.sourceType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<T> InstantiateAsset<T>(AssetReference assetReference) where T : Behaviour
|
public async Task<T> InstantiateAsset<T>(AssetReference assetReference) where T : Behaviour
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 058f1d54faced1a488eff486612f38e5
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 86857ed7de331464dacb1a95b66b970d
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Reference in new issue
Block a user