본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(70) - Monster Killer(32)

by jyppro 2023. 7. 5.

Monster Killer(32)

저번 시간에는 일시정지 상태해제 시 버튼 변경 및 Exit로 게임 종료시키는 기능에 대해 다루었습니다. 오늘은 설정버튼을  통해 설정창을 띄우도록 만들어 보겠습니다.

 

설정 창 만들기

설정에는 다양한 UX기능들이 포함됩니다. 음량조절, 해상도 조절 등 각종 편의성에 관한 기능들이 들어가 있는 창입니다. 저는 현재로서는 모바일을 기준으로 두고 만들고 있기 때문에 해상도 같은 옵션은 만들지 않고 우선 음량조절만 만들고 나서 추후에 하나씩 추가해 나갈 예정입니다.

 

이제는 다들 아시다시피 설정창을 만들기 위해선 UI에서 Image를 통해 배경을 만들고 그 안에 텍스트, 슬라이더 등을 추가하여 구성할 수 있습니다. 저는 이번에도 Stone UI의 스프라이트를 사용하여 구성했습니다.

설정창-만들기
설정창 만들기

X버튼은 설정 창을 닫는 버튼이고, 닫으면 이전에 보셨던 메인화면의 Settings 버튼을 통해 다시 열 수 있도록 코드를 작성해 주었습니다.

using UnityEngine;

public class SettingPageClose : MonoBehaviour
{
    public GameObject SettingsPage;
    void Start() { GetComponent<UnityEngine.UI.Button>().onClick.AddListener(CloseSettings); }

    public void CloseSettings() {SettingsPage.SetActive(false); }
}

이것이 창을 닫는 코드인데, 여는 코드는 SetActive를 true로 바꿔준다음 버튼에 연결만 시켜주면 됩니다.

 

그리고 창을 보시면 볼륨을 조절하는 슬라이더가 하나 있습니다. UI 슬라이더를 생성하여 노브와 백그라운드의 이미지 스프라이트를 Stone UI로 교체해주었습니다. 그럼 이제 볼륨을 실제로 조절할 수 있도록 코드를 짜서 넣어주어야 합니다.

 

SettingsMenu

using UnityEngine;
using UnityEngine.UI;

public class SettingsMenu : MonoBehaviour
{
    public Slider volumeSlider; // 음량 조절을 위한 슬라이더
    private float volume;
    private void Start()
    {
        // 설정 값 불러오기
        volume = PlayerPrefs.GetFloat("Volume", 1f);

        // 슬라이더에 설정 값 반영
        volumeSlider.value = volume;
    }
    private void Update() { SetVolume(volume); }

    public void SetVolume(float volume)
    {
        // 음량 설정 값 저장
        PlayerPrefs.SetFloat("Volume", volume);

        // 실제 음량 조절 로직
        // 볼륨을 volume 값에 따라 조절하는 코드 작성
        volume = volumeSlider.value;
        AudioListener.volume = volume;
    }
}

볼륨을 조절시키는 코드입니다. 정확히는 세팅메뉴에 대한 코드를 작성하는 곳이지만, 현재까지는 볼륨만 존재합니다.

슬라이더를 연결시켜 value값을 가져와 PlayerPrefs를 통해 값을 저장시킵니다. 그리고 SetVolume을 통해 슬라이더를 통해 조절되는 value값을 반영하여 볼륨을 최종적으로 듣는 AudioListener에서 조절해줍니다. 이렇게 하면 설정창을 통해 음량을 조절할 수 있게 됩니다.

 

소리라서 실행화면을 보여드릴 순 없지만, 테스트 결과 제대로 실행되는 것을 확인할 수 있었습니다.

 

<NEXT>

오늘은 세팅 창을 구성하고 볼륨을 조절하는 기능을 넣고, 세팅창을 열고 닫는 기능까지 다뤄보았습니다. 이제부터는 약간의 난이도가 있는 데이터를 저장하고 읽어서 게임을 로딩하는 세이브 및 이어하기 기능에 대해서 천천히 다뤄보도록 하겠습니다. 감사합니다.