From 807dca6a75dc825edf672b260e1adbd5a2f2d14c Mon Sep 17 00:00:00 2001 From: aarthificial Date: Tue, 19 Sep 2023 15:03:19 +0200 Subject: [PATCH] feat: audio settings --- Assets/Audio/Audio Manager.asset | 18 ----- Assets/Audio/AudioManager.cs | 43 +++++++++--- Assets/Framework/GameManager.cs | 2 +- Assets/Scenes/App.unity | 20 +++++- .../Bundles/AudioSettingsBundle.asset | 14 ++++ .../Bundles/AudioSettingsBundle.asset.meta} | 2 +- .../Settings/Bundles/AudioSettingsBundle.cs | 15 +++++ .../Bundles/AudioSettingsBundle.cs.meta | 3 + Assets/View/Prefabs/Settings.prefab | 66 ++++++++++++++++++- Assets/View/Settings/AudioSettingsView.cs | 31 +++++++++ .../View/Settings/AudioSettingsView.cs.meta | 3 + Assets/View/Settings/GameplaySettingsView.cs | 1 + Assets/View/Settings/VideoSettingsView.cs | 1 + 13 files changed, 188 insertions(+), 31 deletions(-) delete mode 100644 Assets/Audio/Audio Manager.asset create mode 100644 Assets/Settings/Bundles/AudioSettingsBundle.asset rename Assets/{Audio/Audio Manager.asset.meta => Settings/Bundles/AudioSettingsBundle.asset.meta} (79%) create mode 100644 Assets/Settings/Bundles/AudioSettingsBundle.cs create mode 100644 Assets/Settings/Bundles/AudioSettingsBundle.cs.meta create mode 100644 Assets/View/Settings/AudioSettingsView.cs create mode 100644 Assets/View/Settings/AudioSettingsView.cs.meta diff --git a/Assets/Audio/Audio Manager.asset b/Assets/Audio/Audio Manager.asset deleted file mode 100644 index 7c83f06..0000000 --- a/Assets/Audio/Audio Manager.asset +++ /dev/null @@ -1,18 +0,0 @@ -%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: 3652f152cd634f7697e2cd512b8f7ea5, type: 3} - m_Name: Audio Manager - m_EditorClassIdentifier: - _ambienceAudio: - Event: {fileID: 11400000, guid: dcac8db30e459054e92fb6f7fa51eab6, type: 2} - _ambienceSceneParam: - _parameter: {fileID: 11400000, guid: 0450059727b268f4daba7c42735d0b23, type: 2} diff --git a/Assets/Audio/AudioManager.cs b/Assets/Audio/AudioManager.cs index ec10391..5b0cac4 100644 --- a/Assets/Audio/AudioManager.cs +++ b/Assets/Audio/AudioManager.cs @@ -1,36 +1,63 @@ using FMOD.Studio; using FMODUnity; -using System; +using Settings.Bundles; using UnityEngine; using UnityEngine.SceneManagement; +using Utils; namespace Audio { - public class AudioManager : ScriptableObject { + public class AudioManager : MonoBehaviour { + [Inject] [SerializeField] private AudioSettingsBundle _bundle; + [SerializeField] private FMODEventInstance _ambienceAudio; [SerializeField] private FMODParameterInstance _ambienceSceneParam; + private VCA _masterVca; + private VCA _musicVca; + private VCA _sfxVca; + private void OnEnable() { -#if UNITY_EDITOR - if (!Application.isPlaying) { - return; - } -#endif _ambienceAudio.Setup(); _ambienceSceneParam.Setup(); + + RuntimeManager.StudioSystem.getVCA("vca:/Master", out _masterVca); + RuntimeManager.StudioSystem.getVCA("vca:/Music", out _musicVca); + RuntimeManager.StudioSystem.getVCA("vca:/SFX", out _sfxVca); + + _bundle.MasterVolume.Changed += HandleMasterVolumeChanged; + _bundle.MusicVolume.Changed += HandleMusicVolumeChanged; + _bundle.SfxVolume.Changed += HandleSfxVolumeChanged; } private void OnDisable() { _ambienceAudio.Release(); + + _bundle.MasterVolume.Changed -= HandleMasterVolumeChanged; + _bundle.MusicVolume.Changed -= HandleMusicVolumeChanged; + _bundle.MusicVolume.Changed -= HandleMusicVolumeChanged; } public void PlayAmbience() { if (_ambienceAudio.IsInitialized) { - _ambienceSceneParam.CurrentValue = SceneManager.GetActiveScene().buildIndex; + _ambienceSceneParam.CurrentValue = + SceneManager.GetActiveScene().buildIndex; _ambienceAudio.Instance.getPlaybackState(out var state); if (state == PLAYBACK_STATE.STOPPED) { _ambienceAudio.Play(); } } } + + private void HandleMasterVolumeChanged(int value) { + _masterVca.setVolume(value / 100f); + } + + private void HandleMusicVolumeChanged(int value) { + _musicVca.setVolume(value / 100f); + } + + private void HandleSfxVolumeChanged(int value) { + _sfxVca.setVolume(value / 100f); + } } } diff --git a/Assets/Framework/GameManager.cs b/Assets/Framework/GameManager.cs index 06af8eb..81e9634 100644 --- a/Assets/Framework/GameManager.cs +++ b/Assets/Framework/GameManager.cs @@ -10,7 +10,7 @@ namespace Framework { public class GameManager : MonoBehaviour { [Inject] public MenuMode MenuMode; [Inject] public StoryMode StoryMode; - [Inject] public AudioManager Audio; + public AudioManager Audio; private GameMode _currentMode; private GameMode _switchingTo; diff --git a/Assets/Scenes/App.unity b/Assets/Scenes/App.unity index 56e4bc3..094f3d7 100644 --- a/Assets/Scenes/App.unity +++ b/Assets/Scenes/App.unity @@ -133,6 +133,7 @@ GameObject: m_Component: - component: {fileID: 512027171} - component: {fileID: 512027174} + - component: {fileID: 512027175} m_Layer: 0 m_Name: GameManager m_TagString: Untagged @@ -169,7 +170,24 @@ MonoBehaviour: m_EditorClassIdentifier: MenuMode: {fileID: 11400000, guid: ba7468ea69d7e1742b4237631535e008, type: 2} StoryMode: {fileID: 11400000, guid: 0f0d16039f21f864db8384ab7bb703c1, type: 2} - Audio: {fileID: 11400000, guid: 443715d2fc2d8bb45aee92c8fe45599c, type: 2} + Audio: {fileID: 512027175} +--- !u!114 &512027175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512027170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3652f152cd634f7697e2cd512b8f7ea5, type: 3} + m_Name: + m_EditorClassIdentifier: + _bundle: {fileID: 11400000, guid: 4ca15592e6d0dd645af1e47645da2bb2, type: 2} + _ambienceAudio: + Event: {fileID: 11400000, guid: dcac8db30e459054e92fb6f7fa51eab6, type: 2} + _ambienceSceneParam: + _parameter: {fileID: 11400000, guid: 0450059727b268f4daba7c42735d0b23, type: 2} --- !u!1 &1273982844 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Settings/Bundles/AudioSettingsBundle.asset b/Assets/Settings/Bundles/AudioSettingsBundle.asset new file mode 100644 index 0000000..0d5fc78 --- /dev/null +++ b/Assets/Settings/Bundles/AudioSettingsBundle.asset @@ -0,0 +1,14 @@ +%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: 05f0c6f95be846b8a7460b3a55eb10e7, type: 3} + m_Name: AudioSettingsBundle + m_EditorClassIdentifier: diff --git a/Assets/Audio/Audio Manager.asset.meta b/Assets/Settings/Bundles/AudioSettingsBundle.asset.meta similarity index 79% rename from Assets/Audio/Audio Manager.asset.meta rename to Assets/Settings/Bundles/AudioSettingsBundle.asset.meta index 2cdf0d9..8403c98 100644 --- a/Assets/Audio/Audio Manager.asset.meta +++ b/Assets/Settings/Bundles/AudioSettingsBundle.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 443715d2fc2d8bb45aee92c8fe45599c +guid: 4ca15592e6d0dd645af1e47645da2bb2 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/Settings/Bundles/AudioSettingsBundle.cs b/Assets/Settings/Bundles/AudioSettingsBundle.cs new file mode 100644 index 0000000..8d2ec10 --- /dev/null +++ b/Assets/Settings/Bundles/AudioSettingsBundle.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +namespace Settings.Bundles { + public class AudioSettingsBundle : ScriptableObject { + public SettingProperty MasterVolume; + public SettingProperty MusicVolume; + public SettingProperty SfxVolume; + + private void OnEnable() { + MasterVolume = new SettingProperty("masterVolume", 100); + MusicVolume = new SettingProperty("musicVolume", 100); + SfxVolume = new SettingProperty("sfxVolume", 100); + } + } +} diff --git a/Assets/Settings/Bundles/AudioSettingsBundle.cs.meta b/Assets/Settings/Bundles/AudioSettingsBundle.cs.meta new file mode 100644 index 0000000..bb1b4d7 --- /dev/null +++ b/Assets/Settings/Bundles/AudioSettingsBundle.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 05f0c6f95be846b8a7460b3a55eb10e7 +timeCreated: 1694981679 \ No newline at end of file diff --git a/Assets/View/Prefabs/Settings.prefab b/Assets/View/Prefabs/Settings.prefab index f84e40f..8aeb45e 100644 --- a/Assets/View/Prefabs/Settings.prefab +++ b/Assets/View/Prefabs/Settings.prefab @@ -955,6 +955,18 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 88b7cbca0ce13424d90538cc711aa839, type: 3} +--- !u!114 &1592565649268680608 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 153574867052211347, guid: 88b7cbca0ce13424d90538cc711aa839, + type: 3} + m_PrefabInstance: {fileID: 1457043680848579379} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9ac3e5033936477285bca467d0096eab, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!224 &9036206068486646610 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 7592919477194661985, guid: 88b7cbca0ce13424d90538cc711aa839, @@ -2782,6 +2794,18 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 6492319053256240420} m_PrefabAsset: {fileID: 0} +--- !u!114 &6357044457871081911 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 153574867052211347, guid: 88b7cbca0ce13424d90538cc711aa839, + type: 3} + m_PrefabInstance: {fileID: 6492319053256240420} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9ac3e5033936477285bca467d0096eab, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &7078473302025070185 PrefabInstance: m_ObjectHideFlags: 0 @@ -2925,7 +2949,11 @@ PrefabInstance: type: 3} insertIndex: -1 addedObject: {fileID: 3694677716969426245} - m_AddedComponents: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 6713824688508555649, guid: 6b06559c6478944418cb5749394954ff, + type: 3} + insertIndex: -1 + addedObject: {fileID: 4654754842219552813} m_SourcePrefab: {fileID: 100100000, guid: 6b06559c6478944418cb5749394954ff, type: 3} --- !u!224 &464277450203248046 stripped RectTransform: @@ -2933,13 +2961,35 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 7078473302025070185} m_PrefabAsset: {fileID: 0} +--- !u!1 &4546245342903318504 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6713824688508555649, guid: 6b06559c6478944418cb5749394954ff, + type: 3} + m_PrefabInstance: {fileID: 7078473302025070185} + m_PrefabAsset: {fileID: 0} +--- !u!114 &4654754842219552813 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4546245342903318504} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ee34f961020c45e28fd272ae6e194fec, type: 3} + m_Name: + m_EditorClassIdentifier: + _bundle: {fileID: 11400000, guid: 4ca15592e6d0dd645af1e47645da2bb2, type: 2} + _masterVolume: {fileID: 1592565649268680608} + _musicVolume: {fileID: 7708861999400715528} + _sfxVolume: {fileID: 6357044457871081911} --- !u!114 &8141849800461558212 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 1352875078984058797, guid: 6b06559c6478944418cb5749394954ff, type: 3} m_PrefabInstance: {fileID: 7078473302025070185} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + m_GameObject: {fileID: 4546245342903318504} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: c52a423b80c94034a47cb2cdaea9a99f, type: 3} @@ -3160,6 +3210,18 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 7555626898791508379} m_PrefabAsset: {fileID: 0} +--- !u!114 &7708861999400715528 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 153574867052211347, guid: 88b7cbca0ce13424d90538cc711aa839, + type: 3} + m_PrefabInstance: {fileID: 7555626898791508379} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9ac3e5033936477285bca467d0096eab, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &7580434391170389285 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/View/Settings/AudioSettingsView.cs b/Assets/View/Settings/AudioSettingsView.cs new file mode 100644 index 0000000..300723f --- /dev/null +++ b/Assets/View/Settings/AudioSettingsView.cs @@ -0,0 +1,31 @@ +using Settings.Bundles; +using UnityEngine; +using Utils; +using View.Controls; + +namespace View.Settings { + [DefaultExecutionOrder(100)] + public class AudioSettingsView : MonoBehaviour { + [Inject] [SerializeField] private AudioSettingsBundle _bundle; + + [SerializeField] private PaperSlider _masterVolume; + [SerializeField] private PaperSlider _musicVolume; + [SerializeField] private PaperSlider _sfxVolume; + + private void OnEnable() { + _masterVolume.Value = _bundle.MasterVolume.Get(); + _musicVolume.Value = _bundle.MusicVolume.Get(); + _sfxVolume.Value = _bundle.SfxVolume.Get(); + + _masterVolume.ValueChanged += _bundle.MasterVolume.Set; + _musicVolume.ValueChanged += _bundle.MusicVolume.Set; + _sfxVolume.ValueChanged += _bundle.SfxVolume.Set; + } + + private void OnDisable() { + _masterVolume.ValueChanged -= _bundle.MasterVolume.Set; + _musicVolume.ValueChanged -= _bundle.MusicVolume.Set; + _sfxVolume.ValueChanged -= _bundle.SfxVolume.Set; + } + } +} diff --git a/Assets/View/Settings/AudioSettingsView.cs.meta b/Assets/View/Settings/AudioSettingsView.cs.meta new file mode 100644 index 0000000..d4b54b4 --- /dev/null +++ b/Assets/View/Settings/AudioSettingsView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ee34f961020c45e28fd272ae6e194fec +timeCreated: 1694981781 \ No newline at end of file diff --git a/Assets/View/Settings/GameplaySettingsView.cs b/Assets/View/Settings/GameplaySettingsView.cs index 1684ccb..d8bb8d0 100644 --- a/Assets/View/Settings/GameplaySettingsView.cs +++ b/Assets/View/Settings/GameplaySettingsView.cs @@ -6,6 +6,7 @@ using View.Controls; namespace View.Settings { + [DefaultExecutionOrder(100)] public class GameplaySettingsView : MonoBehaviour { [Inject] [SerializeField] private GameplaySettingsBundle _bundle; diff --git a/Assets/View/Settings/VideoSettingsView.cs b/Assets/View/Settings/VideoSettingsView.cs index ea7860e..3af66fa 100644 --- a/Assets/View/Settings/VideoSettingsView.cs +++ b/Assets/View/Settings/VideoSettingsView.cs @@ -6,6 +6,7 @@ using View.Controls; namespace View.Settings { + [DefaultExecutionOrder(100)] public class VideoSettingsView : MonoBehaviour { [Inject] [SerializeField] private VideoSettingsBundle _bundle;