Pro_Unit

Sound

Jan 7th, 2022 (edited)
1,252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.79 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3.  
  4. public class Sound : MonoBehaviour
  5. {
  6.     /// <summary>
  7.     /// Имя ключа для сохранения и загрузки громкости
  8.     /// </summary>
  9.     [SerializeField]
  10.     private string _volumeSaveKey = "MusicVolume";
  11.  
  12.     /// <summary>
  13.     /// Источник звука, для которого будет применяться громкость
  14.     /// </summary>
  15.     [SerializeField]
  16.     private AudioSource _audioSource;
  17.  
  18.     /// <summary>
  19.     /// Слайдер, с помощью которого будеи меняться громкость
  20.     /// </summary>
  21.     [SerializeField]
  22.     private Slider _slider;
  23.  
  24.     /// <summary>
  25.     /// Стандартное значение громкости, если при первом запуске игры  не было сохранения
  26.     /// </summary>
  27.     [SerializeField]
  28.     private float _defaultVolumeValue = 1f;
  29.  
  30.     /// <summary>
  31.     /// Вызывается раньше Start
  32.     /// </summary>
  33.     private void Awake()
  34.     {
  35.         DefaultConfigSlider();
  36.  
  37.         LoadVolumeValueToSlider();
  38.  
  39.         // Подписываемся на событие измнения значения слайдера громкости
  40.         _slider.onValueChanged.AddListener(OnVolumeSliderValueChanged);
  41.     }
  42.  
  43.     private void OnDestroy()
  44.     {
  45.         // Обязательно!!! Отписывемся на событие измнения значения слайдера громкости, когда скрипт уничтожится или сцена закроется
  46.         _slider.onValueChanged.RemoveListener(OnVolumeSliderValueChanged);
  47.     }
  48.  
  49.     /// <summary>
  50.     /// Загрузка значения слайдера из сохранения
  51.     /// </summary>
  52.     private void LoadVolumeValueToSlider()
  53.     {
  54.         float volume = PlayerPrefs.GetFloat(_volumeSaveKey, _defaultVolumeValue);
  55.         _slider.value = volume;
  56.         _audioSource.volume = volume;
  57.     }
  58.  
  59.     /// <summary>
  60.     /// Стандартная настрока слайдера чтобы он соответвовал громкости для AudioSource
  61.     /// </summary>
  62.     private void DefaultConfigSlider()
  63.     {
  64.         _slider.minValue = 0f;
  65.         _slider.maxValue = 1;
  66.         _slider.wholeNumbers = false;
  67.     }
  68.  
  69.     /// <summary>
  70.     /// Действие которое происзодит когда значение слайдера поменялось, например игрок покрутил слайдер в настройках
  71.     /// </summary>
  72.     /// <param name="value"> Новое значение слайдера громкости</param>
  73.     private void OnVolumeSliderValueChanged(float value)
  74.     {
  75.         // Cтавим значение громкости для AudioSource
  76.         _audioSource.volume = value;
  77.        
  78.         // Сохрнаяем новое значение громкости
  79.         PlayerPrefs.SetFloat(_volumeSaveKey, value);
  80.     }
  81. }
Add Comment
Please, Sign In to add comment