Audio система в процессе
This commit is contained in:
1 parent
b13cf8cfc0
commit
557c4c3dee
10 files changed
+236
-30
No files matched your search
@@ -1,8 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Code.Configs;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using UnityEngine.Audio;
|
||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace Code.Audio
|
||||
@@ -10,13 +13,29 @@ namespace Code.Audio
|
||||
public class AudioFactory : IAudioFactory
|
||||
{
|
||||
private AssetReference _audioMixerPrefab;
|
||||
private AssetReference _audioSourcePrefab;
|
||||
|
||||
private AssetReference[] _peacefulSoundtrack;
|
||||
private AssetReference[] _actionSoundtrack;
|
||||
private AssetReference[] _menuSoundtrack;
|
||||
private AssetReference[] _SFX;
|
||||
private AssetReference[] _enemies;
|
||||
private AssetReference[] _dispatcher;
|
||||
private AssetReference[] _character;
|
||||
|
||||
private AsyncOperationHandle<IList<AudioClip>> _menuMusicHandle;
|
||||
private AsyncOperationHandle<IList<AudioClip>> _actionMusicHandle;
|
||||
private AsyncOperationHandle<IList<AudioClip>> _peacefulMusicHandle;
|
||||
private AsyncOperationHandle<IList<AudioClip>> _SFXHandle;
|
||||
private AsyncOperationHandle<IList<AudioClip>> _enemiesHandle;
|
||||
private AsyncOperationHandle<IList<AudioClip>> _dispatcherHandle;
|
||||
|
||||
public List<AudioClip> PeacefulMusic { get; private set; }
|
||||
public List<AudioClip> ActionMusic { get; private set; }
|
||||
public List<AudioClip> MenuMusic { get; private set; }
|
||||
public List<AudioClip> SFXAudios { get; private set; }
|
||||
public List<AudioClip> EnemiesAudios { get; private set; }
|
||||
public List<AudioClip> DispatcherAudios { get; private set; }
|
||||
|
||||
public AudioFactory(AudioMixerConfig audioMixerConfig,
|
||||
SoundtrackListConfig soundtrackListConfig,
|
||||
@@ -26,15 +45,18 @@ namespace Code.Audio
|
||||
CharacterSoundListConfig characterSoundListConfig)
|
||||
{
|
||||
_audioMixerPrefab = audioMixerConfig.audioMixerPrefab;
|
||||
_audioSourcePrefab = audioMixerConfig.audioSourcePrefab;
|
||||
|
||||
_peacefulSoundtrack = soundtrackListConfig.peacefulSoundtrack;
|
||||
_actionSoundtrack = soundtrackListConfig.actionSoundtrack;
|
||||
_actionSoundtrack = soundtrackListConfig.menuSoundtrack;
|
||||
_SFX = sfxListConfig.SFX;
|
||||
_enemies = enemiesSoundListConfig.enemies;
|
||||
_dispatcher = dispatcherSoundListConfig.dispatcher;
|
||||
_character = characterSoundListConfig.character;
|
||||
}
|
||||
public async UniTask<AudioMixer> CreateCanvas()
|
||||
|
||||
public async UniTask<AudioMixer> CreateMixer()
|
||||
{
|
||||
AudioMixer audioMixer = (await Addressables.InstantiateAsync(_audioMixerPrefab).ToUniTask()).GetComponent<AudioMixer>();
|
||||
|
||||
@@ -43,10 +65,108 @@ namespace Code.Audio
|
||||
return audioMixer;
|
||||
}
|
||||
|
||||
public void ReleaseMixer()
|
||||
public async UniTaskVoid LoadAudioSourcePrefab(Action<AudioSource> callback) => callback?.Invoke(await Addressables.LoadAssetAsync<AudioSource>(_audioSourcePrefab));
|
||||
|
||||
public async UniTaskVoid WarmGameplayMusic(Action callback)
|
||||
{
|
||||
_actionMusicHandle = Addressables.LoadAssetsAsync<AudioClip>(_actionSoundtrack, OnActionTrackLoaded);
|
||||
_peacefulMusicHandle = Addressables.LoadAssetsAsync<AudioClip>(_peacefulSoundtrack, OnPeacefulTrackLoaded);
|
||||
|
||||
await UniTask.WhenAll(_actionMusicHandle.ToUniTask(), _peacefulMusicHandle.ToUniTask());
|
||||
|
||||
callback?.Invoke();
|
||||
}
|
||||
|
||||
public void ReleaseGameplayMusic()
|
||||
{
|
||||
ActionMusic.Clear();
|
||||
_actionMusicHandle.Release();
|
||||
|
||||
PeacefulMusic.Clear();
|
||||
_peacefulMusicHandle.Release();
|
||||
}
|
||||
|
||||
public async UniTaskVoid WarmMenuMusic(Action callback)
|
||||
{
|
||||
_menuMusicHandle = Addressables.LoadAssetsAsync<AudioClip>(_menuSoundtrack, OnMenuTrackLoaded);
|
||||
|
||||
await _menuMusicHandle.ToUniTask();
|
||||
|
||||
callback?.Invoke();
|
||||
}
|
||||
|
||||
public void ReleaseMenuMusic()
|
||||
{
|
||||
MenuMusic.Clear();
|
||||
_menuMusicHandle.Release();
|
||||
}
|
||||
public async UniTaskVoid WarmSFX(Action callback)
|
||||
{
|
||||
_SFXHandle = Addressables.LoadAssetsAsync<AudioClip>(_SFX, OnSFXLoaded);
|
||||
|
||||
await _SFXHandle.ToUniTask();
|
||||
|
||||
callback?.Invoke();
|
||||
}
|
||||
|
||||
public void ReleaseSFX()
|
||||
{
|
||||
SFXAudios.Clear();
|
||||
_SFXHandle.Release();
|
||||
}
|
||||
public async UniTaskVoid WarmEnemies(Action callback)
|
||||
{
|
||||
_enemiesHandle = Addressables.LoadAssetsAsync<AudioClip>(_enemies, OnEnemiesLoaded);
|
||||
|
||||
await _enemiesHandle.ToUniTask();
|
||||
|
||||
callback?.Invoke();
|
||||
}
|
||||
|
||||
public void ReleaseEnemies()
|
||||
{
|
||||
EnemiesAudios.Clear();
|
||||
_enemiesHandle.Release();
|
||||
}
|
||||
|
||||
public async UniTaskVoid WarmDispatcher(Action callback)
|
||||
{
|
||||
_dispatcherHandle = Addressables.LoadAssetsAsync<AudioClip>(_dispatcher, OnDispatcherLoaded);
|
||||
|
||||
await _dispatcherHandle.ToUniTask();
|
||||
|
||||
callback?.Invoke();
|
||||
}
|
||||
|
||||
public void ReleaseDispatcher()
|
||||
{
|
||||
DispatcherAudios.Clear();
|
||||
_dispatcherHandle.Release();
|
||||
}
|
||||
|
||||
private void OnActionTrackLoaded(AudioClip audioClip)
|
||||
{
|
||||
ActionMusic.Add(audioClip);
|
||||
}
|
||||
private void OnPeacefulTrackLoaded(AudioClip audioClip)
|
||||
{
|
||||
PeacefulMusic.Add(audioClip);
|
||||
}
|
||||
private void OnMenuTrackLoaded(AudioClip audioClip)
|
||||
{
|
||||
MenuMusic.Add(audioClip);
|
||||
}
|
||||
private void OnSFXLoaded(AudioClip audioClip)
|
||||
{
|
||||
SFXAudios.Add(audioClip);
|
||||
}
|
||||
private void OnEnemiesLoaded(AudioClip audioClip)
|
||||
{
|
||||
EnemiesAudios.Add(audioClip);
|
||||
}
|
||||
private void OnDispatcherLoaded(AudioClip audioClip)
|
||||
{
|
||||
DispatcherAudios.Add(audioClip);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user