ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2022ǯ11·î06Æü(Æü) 18:56:15ÍúÎò
Unity¤Ë´ØÏ¢¤¹¤ëµ»ö¤Ç¤¹
ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2022ǯ11·î06Æü(Æü) 18:56:15ÍúÎò
/// <summary> /// Äê¿ô¾ðÊó¤ÎÅÐÏ¿ÍÑ¥¯¥é¥¹ /// </summary> public static class ConstData { public const float DEFAULT_MASTER_VOLUME = 0.7f; public const string MASTER_AUDIO_NAME = "Master"; // AudioMixer ¤Î AudioGroup ¤Î̾Á°¤Ç»ØÄê¤Ç¤¤ë¡£AudioMixer ¦¤Î¥¹¥¯¥ê¥×¥È¤Ç¤ÎÀ©¸æµö²Ä¤ÎÀßÄ꤬ɬÍ× }
using System.Collections; using UnityEngine; using UnityEngine.Audio; using DG.Tweening; /// <summary> /// ²»´ÉÍý¥¯¥é¥¹ /// </summary> public class SoundManager : MonoBehaviour { public static SoundManager instance; // BGM [SerializeField] ¡¡¡¡private AudioSource[] BGMsources = new AudioSource[2]; ¡¡¡¡// SE ¡¡¡¡private AudioSource[] SEsources = new AudioSource[24]; // SEÍÑAudioMixer public AudioMixerGroup[] audioMixerGroups; private float masterVolume; public void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(this.gameObject); // ¥²¡¼¥à¤Î½é´üÀßÄê Init(ConstData.DEFAULT_MASTER_VOLUME); } else { Destroy(this.gameObject); } } /// <summary> /// ½é´üÀßÄê /// </summary> /// <param name="newMasterVolume"></param> public void Init (float newMasterVolume) { // TODO BGM¡¢SE¤Ê¤É¤Î½é´üÀßÄê // SE AudioSource for (int i = 0 ; i < SEsources.Length ; i++ ){ ¡¡¡¡SEsources[i] = gameObject.AddComponent<AudioSource>(); SEsources[i].outputAudioMixerGroup = audioMixerGroups[0]; } // ½é´ü²»ÎÌÀßÄê SetMasterVolume(newMasterVolume); DOTween.Init(); } /// <summary> /// ¥Þ¥¹¥¿¡¼¥Ü¥ê¥å¡¼¥à¤ÎÀßÄêÃ͹¹¿· /// </summary> /// <param name="newVolume"></param> public void SetMasterVolume(float newVolume) { masterVolume = newVolume; } /// <summary> /// »ØÄꤷ¤¿ AudioGroup ¤Î²»ÎÌÊѹ¹ /// Slider ¤ÎÃÍ(0 - 1.0f)¤ò AudioMixer ¤Î¥Ç¥¸¥Ù¥ë¤ËÊÑ´¹¤·¤ÆÅ¬ÍÑ /// </summary> /// <param name="mixerGroupName"></param> /// <param name="linearVolume"></param> public void SetLinearVolumeToMixerGroup(string mixerGroupName, float linerVolume) { float decibel = 20.0f * Mathf.Log10(linerVolume); if (float.IsNegativeInfinity(decibel)) { decibel = -96f; // ̵²»¤Ï -80f ¤Ç¤Ï¤Ê¤¯¤Æ -96f ¤Ë¤¹¤ë } audioMixerGroups[0].audioMixer.SetFloat(mixerGroupName, decibel); } /// <summary> /// »ØÄꤷ¤¿ AudioGroup ¤Î²»Î̤ò float ¤Ç¼èÆÀ /// </summary> /// <param name="mixerGroupName"></param> /// <returns></returns> public float GetLinearVolumeFromMixerGroup(string mixerGroupName) { float decibel; // Master audioMixerGroups[0].audioMixer.GetFloat(mixerGroupName, out decibel); return Mathf.Pow(10f, decibel / 20f); }
using UnityEngine; using UnityEngine.UI; using DG.Tweening; using UniRx; public class UIView : MonoBehaviour { [SerializeField] private Slider volumeSlider; [SerializeField] private Text txtVolumeValue; void Start() { // ¥Ç¥Ð¥Ã¥°ÍÑ SetUp(); } /// <summary> /// ½é´üÀßÄê /// </summary> public void SetUp() { // Slider ¤Î OnValueChangedAsObservable ¤ò¹ØÆÉ volumeSlider.OnValueChangedAsObservable() .Subscribe(x => { SoundManager.instance.SetLinearVolumeToMixerGroup(ConstData.MASTER_AUDIO_NAME, x); UpdateVolumeValue(x); }) .AddTo(gameObject); // ¥¹¥é¥¤¥À¡¼¤Î Value ¤Ë¸½ºß¤Î¥Ü¥ê¥å¡¼¥àÀßÄê volumeSlider.value = SoundManager.instance.masterVolume; } /// <summary> /// ¥Ü¥ê¥å¡¼¥à¤Î ¡ó ɽ¼¨¤Î¹¹¿· /// </summary> /// <param name="value"></param> private void UpdateVolumeValue(float value) { txtVolumeValue.text = (value * 100).ToString("F0"); } }
¥³¥á¥ó¥È¤ò¤«¤¯