Engine/Unity

Unity 6 옵션 창(설정 창) 구현하기

VirtualDever 2024. 10. 12. 10:19

- Unity version : 6000.0.21f1

 

이렇게 설정창에는 볼륨 조정할 수 있는 UI slider가 있을 수 있겠다.

아래 스크린샷은 예시로 보여주는 화면이다.

이미지만 참고하는 것이 좋겠다.

 

- 이미지 출처 : https://assetstore.unity.com/packages/tools/audio/eazy-sound-manager-71142

 

Eazy Sound Manager | 음악 | Unity Asset Store

Get the Eazy Sound Manager package from Hellmade Games and speed up your game development process. Find this & other 음악 options on the Unity Asset Store.

assetstore.unity.com

 

옵션 씬을 관리하는 클래스 SceneOptions 을 구현하였다.

옵션은 볼륨을 포함하여, 마우스 감도, 화면 밝기 등을 추가하였다.

  • Master Volume
  • Music Volume
  • Sound Effect Volume
  • Mouse Sensitivity
  • Brightness

각 UI Slider는 listener로 함수를 등록하였다.

그리고 각 옵션들 값은 다른 클래스 OptionParameters 정적 클래스에 저장된다.

using UnityEngine;
using UnityEngine.UI;

namespace Sample
{
    public class SceneOptions : MonoBehaviour
    {
        public Slider m_SliderMasterVolume;
        public Slider m_SliderMusicVolume;
        public Slider m_SliderSoundEffectVolume;
        public Slider m_SliderMouseSensitivity;
        public Slider m_SliderBrightness;

        private void Awake()
        {
            m_SliderMasterVolume.onValueChanged.AddListener(SlideMasterVolume);
            m_SliderMusicVolume.onValueChanged.AddListener(SlideMusicVolume);
            m_SliderSoundEffectVolume.onValueChanged.AddListener(SlideSoundEffectVolume);
            m_SliderMouseSensitivity.onValueChanged.AddListener(SlideMouseSensitivity);
            m_SliderBrightness.onValueChanged.AddListener(SlideBrightness);

            OptionParameters.Load();

            m_SliderMasterVolume.value = OptionParameters.masterVolume;
            m_SliderMusicVolume.value = OptionParameters.musicVolume;
            m_SliderSoundEffectVolume.value = OptionParameters.soundEffectVolume;
            m_SliderMouseSensitivity.value = OptionParameters.mouseSensitivity * 0.01f;
            m_SliderBrightness.value = OptionParameters.brightness;
        }

        private void OnDestroy()
        {
            OptionParameters.Save();
        }

        void SlideMasterVolume(float _value)
        {
            OptionParameters.masterVolume *= _value;
        }

        void SlideMusicVolume(float _value)
        {
            OptionParameters.musicVolume *= _value;
        }

        void SlideSoundEffectVolume(float _value)
        {
            OptionParameters.soundEffectVolume *= _value;
        }

        void SlideMouseSensitivity(float _value)
        {
            OptionParameters.mouseSensitivity *= _value;
        }

        void SlideBrightness(float _value)
        {
            OptionParameters.brightness *= _value;
        }
    }
}

 

OptionParameters 정적 클래스는 옵션 값들이다.

이 옵션 값들은 PlayerPrefs에 저장되며 사용자의 기기, 로컬에만 저장된다.

using UnityEditor;
using UnityEngine;

namespace Sample
{
    public static class OptionParameters
    {
        public static float masterVolume = 0.5f;
        public static float musicVolume = 0.5f;
        public static float soundEffectVolume = 0.5f;
        public static float mouseSensitivity = 100f;
        public static float brightness = 0.5f;

        public static void Save()
        {
            PlayerPrefs.SetFloat("masterVolume", masterVolume);
            PlayerPrefs.SetFloat("musicVolume", musicVolume);
            PlayerPrefs.SetFloat("soundEffectVolume", soundEffectVolume);
            PlayerPrefs.SetFloat("mouseSensitivity", mouseSensitivity);
            PlayerPrefs.SetFloat("brightness", brightness);
        }

        public static void Load() 
        {
            masterVolume = PlayerPrefs.GetFloat("masterVolume", 0.5f);
            musicVolume = PlayerPrefs.GetFloat("musicVolume", 0.5f);
            soundEffectVolume = PlayerPrefs.GetFloat("soundEffectVolume", 0.5f);
            mouseSensitivity = PlayerPrefs.GetFloat("mouseSensitivity", 100f);
            brightness = PlayerPrefs.GetFloat("brightness", 0.5f);
        }
    }
}

 

마지막으로 밝기(brightness) 조정은 아래와 같이 설정한다.

Light.intensity 값을 조정하면 되겠다.

using UnityEngine;

namespace Sample
{
    public class LightBrightness : MonoBehaviour
    {
        public Light sceneLight;

        private void Awake()
        {
            SetBrightness(OptionParameters.brightness);
        }

        public void SetBrightness(float _value)
        {
            sceneLight.intensity = _value;
        }
    }
}

 

마지막으로 사운드 값 설정은 Easy Sound Manager 에셋(무료)을 사용하여 조절한다.