유니티/UI

유니티 시작메뉴 구성하기 (Creating Unity Start Menu) - 새게임과 종료하기

민또배기 2023. 3. 7. 02:10
반응형

OS : Window11

Version : 2021.3.16f1

 

오늘은 게임의 시작 화면을 만들어 보려 합니다.

뭔가 이렇게 해서 하나의 게임을 만들어가는 것도 괜찮지 않을까? 라는 생각도 드네요

 

사진

 

게임의 타이틀을 만들 겁니다.

게임의 타이틀은 TMP(text mesh pro)로 만들었습니다.

TMP는 Text-TextMeshPro 처럼 옆에 추가적으로 써져 있으므로 사용하기 쉽습니다.

TMP를 사용했다면 아래와 같은 창을 잘 확인해주시고 Import TMP Essentials를 클릭해야 합니다.

하지만 TMP를 사용한뒤 한글을 쓰면... 모두 네모네모가 되는 볌메 걸리고 맘니다.

해결 방법은 다음 링크를 확인해주세요

https://roomdev-diary.tistory.com/83

저는 다음과 같이 작성했습니다.

그리고 ButtonGroup에 Vertical Layout Group를 추가합니다.

그러면 자연스레 정렬이 되죠 개꿀....

여기서 그러면 새 게임 과 끝내기만 만들어 봅시다.

(코딩을 안하면 조금 아쉬우니까요)

 

그전에 하나의 씬을 더 만들어 놓아야 합니다.

기본으로 있던 씬은 StartScene으로 이름을 바꾸고 새로 생성하는 씬은 NewGameScene으로 합시다.

그리고 File/Build Settings를 클릭합니다.

드래그를 해서 넣으시면 되는데 오른쪽을 봤을 때, 0,1을 잘 기억해주셔야 합니다. 저 번호를 기준으로 씬을 이동하게 하려합니다.

 

ButtonsGroup에 Script를 추가하여 주시고 소스코드를 작성합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MenuButtons : MonoBehaviour
{
    public void NewGame()
    {
        int index = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(index + 1);
    }

}

위 소스코드는 현재 실행된 씬의 인덱스를 가져오고 1을 더해서 다음씬을 로드하는 코드 입니다.

NewGame버튼을 클릭한뒤 ButtonsGroup를 드래그 하시고 작성했던 NewGame()이라는 함수를 선택하시면 됩니다.

클릭하면 다음씬으로 넘어가는걸 보실 수 있습니다.

여기서 끝내기 아쉬우니 하나 더!!

종료하기 버튼입니다.

기존의 소스코드에 QuitGame()이라는 소스코드를 추가해 줍니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MenuButtons : MonoBehaviour
{
    public void NewGame()
    {
        int index = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(index + 1);
    }
    public void QuitGame()
    {
        Application.Quit();
    }
}

하지만 저 소스코드는 앱을 빌드해야만 확인할 수 있습니다 .그렇다면!! 확인할 수 있는 다른 방법은 없을까요?

있죠!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MenuButtons : MonoBehaviour
{
    public void NewGame()
    {
        int index = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(index + 1);
    }
    public void QuitGame()
    {
#if UNITY_EDITOR
        UnityEditor.EditorApplication.isPlaying = false;
#else
      Application.Quit();
#endif
    }
}

#if 라는 전처리기 지시어를 통해 플랫폼별로 다르게 동작 할 수 있습니다.

종료버튼을 누르면 에디터 실행이 끝나는 걸 보실 수 있습니다.

 

불러오기와 설정은... 다른 작업이 많이 필요할 듯 싶어 여기까지만.. 하겠습니다..

새벽 2시라 피곤하네요..

 

끝까지 봐주셔서 감사합니다.

 

반응형