1vdlrwnsv1 님의 블로그
옵션을 만들자 본문
옵션 기능엔 마우스 감도, 사운드 조절, 사운드 매니저랑 연동이 돼야함
using UnityEngine;
using UnityEngine.UI;
public class OptionUI : PopupUI
{
[Header("Mouse Sensitivity")]
public Text hipSensitivityText;
public Text adsSensitivityText;
public float hipSensitivity = 1f;
public float adsSensitivity = 1f;
[Header("Sound Sliders")]
public Slider masterSlider;
public Slider seSlider;
public Slider bgmSlider;
public Text masterValueText;
public Text seValueText;
public Text bgmValueText;
protected override void Awake()
{
base.Awake();
masterSlider.minValue = 0;
masterSlider.maxValue = 100;
seSlider.minValue = 0;
seSlider.maxValue = 100;
bgmSlider.minValue = 0;
bgmSlider.maxValue = 100;
// masterSlider.value = SoundManager.Instance.GetMasterVolume() * 100f;
UpdateSensitivityTexts();
// 사운드 슬라이더 값 변경 리스너 등록
masterSlider.onValueChanged.AddListener((v) =>
{
masterValueText.text = v.ToString("0");
SoundManager.Instance.SetMasterVolume(v / 100f);
});
seSlider.onValueChanged.AddListener((v) =>
{
seValueText.text = v.ToString("0");
SoundManager.Instance.SetSFXVolume(v / 100f);
});
bgmSlider.onValueChanged.AddListener((v) =>
{
bgmValueText.text = v.ToString("0");
SoundManager.Instance.SetMusicVolume(v / 100f);
});
}
private void OnEnable()
{
// SoundManager의 값을 가져와서 슬라이더에 적용
masterSlider.value = SoundManager.Instance.masterVol * 100f;
seSlider.value = SoundManager.Instance.sfxVol * 100f;
bgmSlider.value = SoundManager.Instance.backgroundMusicVol * 100f;
// 슬라이더 값에 맞는 텍스트 갱신
UpdateSoundTexts();
}
#region Sensitivity Control
public void ChangeHipSensitivity(float delta)
{
hipSensitivity = Mathf.Clamp(hipSensitivity + delta, 0f, 9.9f);
UpdateSensitivityTexts();
// GameSettings.Instance.HipSensitivity = hipSensitivity;
}
public void ChangeADSSensitivity(float delta)
{
adsSensitivity = Mathf.Clamp(adsSensitivity + delta, 0f, 9.9f);
UpdateSensitivityTexts();
// GameSettings.Instance.ADSSensitivity = adsSensitivity;
}
private void UpdateSensitivityTexts()
{
hipSensitivityText.text = hipSensitivity.ToString("0.0");
adsSensitivityText.text = adsSensitivity.ToString("0.0");
}
#endregion
private void UpdateSoundTexts()
{
masterValueText.text = masterSlider.value.ToString("0");
seValueText.text = seSlider.value.ToString("0");
bgmValueText.text = bgmSlider.value.ToString("0");
}
public void OnClickClose()
{
UIManager.Instance.ClosePopUpUI();
}
}
PopupUI를 상속받는 UI 팝업창 클래스
위 스크립트의 Awake() 초기설정
protected override void Awake()
{
base.Awake();
masterSlider.minValue = 0;
masterSlider.maxValue = 100;
seSlider.minValue = 0;
seSlider.maxValue = 100;
bgmSlider.minValue = 0;
bgmSlider.maxValue = 100;
// masterSlider.value = SoundManager.Instance.GetMasterVolume() * 100f;
UpdateSensitivityTexts();
// 사운드 슬라이더 값 변경 리스너 등록
masterSlider.onValueChanged.AddListener((v) =>
{
masterValueText.text = v.ToString("0");
SoundManager.Instance.SetMasterVolume(v / 100f);
});
seSlider.onValueChanged.AddListener((v) =>
{
seValueText.text = v.ToString("0");
SoundManager.Instance.SetSFXVolume(v / 100f);
});
bgmSlider.onValueChanged.AddListener((v) =>
{
bgmValueText.text = v.ToString("0");
SoundManager.Instance.SetMusicVolume(v / 100f);
});
}
슬라이더의 최소 최대값 0, 100설정
슬라이더 변경시 볼륨 값 적용하는 리스너 추가
ex) masterSlider.onValueChanged.AddListener((v) => {...});
콜백함수 등록 슬라이더 값이 변경 될 때마다 실행 onValueChanged 이벤트가 발생할 때마다 람다 함수(즉, 콜백 함수)가 호출 masterValueText.text를 업데이트하고, SoundManager에 새로운 볼륨을 설정
이 코드에서 onValueChanged는 델리게이트 타입
Slider 클래스에서 제공하는 onValueChanged는 값이 변경될 때 호출될 메서드 참조를 받을 수 있는 델리게이트. 그리고 AddListener 메서드를 사용하여 델리게이트에 콜백 함수를 추가함
슬라이더 움직이면:
- 텍스트 업데이트
- SoundManager에 실제 볼륨 값(0.0~1.0)으로 전달
OnEnable() - UI가 켜질 때 실행
private void OnEnable()
{
// SoundManager의 값을 가져와서 슬라이더에 적용
masterSlider.value = SoundManager.Instance.masterVol * 100f;
seSlider.value = SoundManager.Instance.sfxVol * 100f;
bgmSlider.value = SoundManager.Instance.backgroundMusicVol * 100f;
// 슬라이더 값에 맞는 텍스트 갱신
UpdateSoundTexts();
}
SoundManager에서 현재 볼륨 상태를 가져와서 슬라이더에 반영
100을 곱해줘야 슬라이더 스케일에 맞음 (SoundManager의 값은 0~1까지여서)
UpdateSoundText()로 텍스트 동기화
감도 조절 (아직 마우스 연결 안됨)
public void ChangeHipSensitivity(float delta)
public void ChangeADSSensitivity(float delta)
외부에서 버튼누르면 값을 전달받아 감도를 조절
>> = -1, > = -0.1
텍스트도 실시간 갱신
UpdateSensitivityTexts()
UpdateSoundTexts()
메서드 들로 텍스트 실시간 갱신
해야할것: 마우스 감도기능 구현
'Unity 최종' 카테고리의 다른 글
unity 오브젝트 풀링 매니저 (0) | 2025.04.25 |
---|---|
유니티 PlayerPref를 이용한 사운드 값, 마우스 감도 값 저장 불러오기 (0) | 2025.04.23 |
무기 교체, 아이템 장착 시스템 구현 (0) | 2025.04.17 |
유니티 레드토드사이트 셰이더 만들기 (0) | 2025.04.14 |
Unity 총기 흔들림, 반동 구현, 사운드 처리 (0) | 2025.04.09 |