[유니티]탑다운 슈팅 따라하기 #24 메뉴

안녕하세요 유랑입니다.

 

 

실력향상을 위해서 오늘은 유튜브를 따라하면서 공부하겠습니다.

궁금하신점 있으시다면 댓글로 남겨주세요^^

 

 

 

1. 탑다운 슈팅 따라하기

 

 

이번 강의는 Sebastian Lague님께서 만든 예제이며,

유튜브를 보시면 자세한 내용을 배우실 수 있습니다.

 

유튜브 사이트 => 유튜브 

 

 

 

유니티 슈팅

 

 

 

1. 메뉴

 

 

이번 시간에는 메뉴를 만들어 보겠습니다.

옵션창도 만들어 화면 크기와 볼륨 설정도 세팅할 수 있도록 할께요.

 

 

 

유니티 슈팅

 

 

 

2-1) 메인 메뉴 만들기

 

 

우선 씬을 새로 만들어 이름은 메뉴라고 바꿔주겠습니다.

 

 

 

유니티 슈팅

 

 

Menu씬에는 메인 메뉴와 옵션 메뉴가 존재합니다.

캔버스를 생성하고 차근차근 만들어 볼께요^^

 

 

유니티 슈팅

 

 

Text를 생성해 타이틀을 만들어 줍니다.

 

 

유니티 슈팅

 

 

메인 메뉴 오브젝트는 세 가지의 버튼으로 이루어져있습니다.

 

 

유니티 슈팅

 

 

Play 버튼은 Main씬을 불러옵니다.

 

 

유니티 슈팅

 

 

유니티 슈팅

 

 

Options 버튼은 옵션 메뉴를 보여줍니다.

 

 

유니티 슈팅

 

 

Quit 버튼은 게임을 종료시킵니다.

 

 

유니티 슈팅

 

 

 

2-2) 옵션 메뉴 만들기

 

 

옵션 메뉴는 볼륨 설정과 씬 크기를 조절가능합니다.

 

 

 

유니티 슈팅

 

 

옵션 메뉴는 슬라이더, 토글, 버튼으로 이루어져 있습니다.

 

 

유니티 슈팅

 

 

Master 슬라이더는 마스터 볼륨을 조절합니다.

 

 

유니티 슈팅

 

 

Music 슬라이더는 뮤직 볼륨을 조절합니다.

 

 

유니티 슈팅

 

 

Sfx 슬라이더는 사운드이펙트 볼륨을 조절합니다.

 

 

유니티 슈팅

 

 

Screen resolution 01 토글은 960x540 사이즈로 변경해줍니다.

 

 

유니티 슈팅

 

 

Screen resolution 02 토글은 1280x720 사이즈로 변경해줍니다.

 

 

유니티 슈팅

 

 

Screen resolution 03 토글은 1920x1080 사이즈로 변경해줍니다.

 

 

 

유니티 슈팅

 

 

Fullscreen 토글은  최대 사이즈로 변경해줍니다.

 

 

유니티 슈팅

 

 

Back 버튼은 메인메뉴로 돌아가게 해줍니다.

 

 

유니티 슈팅

 

 

 

2-3) 스크립트 작성 -㉠Menu

 

 

Menu 스크립트는 메뉴에 있는 기능들을 담당합니다.

볼륨 설정과 게임시작, 종료 등 말이죠ㅎㅎ

 

 

 

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class Menu : MonoBehaviour
{
    public GameObject mainMenuHolder;
    public GameObject optionsMenuHolder;

    public Slider[] volumeSliders;
    public Toggle[] resolutionToggles;
    public Toggle fullscreenToggle;
    public int[] screenWidths;
    int activeScreenResIndex;

    void Start()
    {
        activeScreenResIndex = PlayerPrefs.GetInt("screen res index");
        bool isFullscreen = (PlayerPrefs.GetInt("fullscreen") == 1) ? true : false;

        volumeSliders[0].value = AudioManager.instance.masterVolumePercent;
        volumeSliders[1].value = AudioManager.instance.musicVolumePercent;
        volumeSliders[2].value = AudioManager.instance.sfxVolumePercent;

        for (int i = 0; i < resolutionToggles.Length; i++)
        {
            resolutionToggles[i].isOn = i == activeScreenResIndex;
        }

        fullscreenToggle.isOn = isFullscreen;
    }


    public void Play()
    {
        SceneManager.LoadScene("Main");
    }

    public void Quit()
    {
        Application.Quit();
    }

    public void OptionsMenu()
    {
        mainMenuHolder.SetActive(false);
        optionsMenuHolder.SetActive(true);
    }

    public void MainMenu()
    {
        mainMenuHolder.SetActive(true);
        optionsMenuHolder.SetActive(false);
    }

    public void SetScreenResolution(int i)
    {
        if (resolutionToggles[i].isOn)
        {
            activeScreenResIndex = i;
            float aspectRatio = 16 / 9f;
            Screen.SetResolution(screenWidths[i], (int)(screenWidths[i] / aspectRatio), false);
            PlayerPrefs.SetInt("screen res index", activeScreenResIndex);
            PlayerPrefs.Save();
        }
    }

    public void SetFullscreen(bool isFullscreen)
    {
        for (int i = 0; i < resolutionToggles.Length; i++)
        {
            resolutionToggles[i].interactable = !isFullscreen;
        }

        if (isFullscreen)
        {
            Resolution[] allResolutions = Screen.resolutions;
            Resolution maxResolution = allResolutions[allResolutions.Length - 1];
            Screen.SetResolution(maxResolution.width, maxResolution.height, true);
        }
        else
        {
            SetScreenResolution(activeScreenResIndex);
        }

        PlayerPrefs.SetInt("fullscreen", ((isFullscreen) ? 1 : 0));
        PlayerPrefs.Save();
    }

    public void SetMasterVolume(float value)
    {
        AudioManager.instance.SetVolume(value, AudioManager.AudioChannel.Master);
    }

    public void SetMusicVolume(float value)
    {
        AudioManager.instance.SetVolume(value, AudioManager.AudioChannel.Music);
    }

    public void SetSfxVolume(float value)
    {
        AudioManager.instance.SetVolume(value, AudioManager.AudioChannel.Sfx);
    }

}

 

 

 

2-4) 스크립트 작성 -㉡AudioManager

 

 

Menu 스크립트 설정으로 인하여 AudioManager 볼륨 부분을 변경해 줍니다.

다른 스크립트에서 접근 가능하도록 public으로 설정.

 

 

 

유니티 슈팅

 

 

Player가 있을 경우만 Player 정보를 가져옵니다.

 

 

유니티 슈팅

 

 

 

2-5) 스크립트 적용

 

 

빈오브젝트를 생성해 MenuManager를 만들어 줍니다.

Menu 스크립트에는 슬라이더, 토글, 버튼을 각각 넣어주세요^^

 

 

 

유니티 슈팅

 

 

Main씬에 있는 AudioManager를 가져와 추가해 주세요.

 

 

유니티 슈팅

 

 

그리고 메인카메라에 있는 오디오 리스너를 삭제해 줍니다.

 

 

유니티 슈팅

 

 

 

2-6) 빌드하기

 

 

이제 빌드를 하여 게임을 실행해 보겠습니다.

테스트를 위해 화면사이즈 설정과

Fullscreen 스위치 기능을 언체크 해줍니다.

 

 

 

유니티 슈팅

 

 

메뉴와 메인씬을 추가한 후 빌드해 주세요.

 

 

유니티 슈팅

 

 

 

 

 

3. 마무리

 

 

오늘 강의는 여기까지입니다.

탑다운 슈팅을 따라하면서 메뉴를 만들어 보았습니다.

감사합니다.

 

 

 

수업자료: 탑다운 슈팅 따라하기 #24 메뉴

 

 

 

 

 

 

 

댓글

Designed by JB FACTORY