코드 및 공부/씬

씬 관리 (1)

ekrxjvpvj0110 2024. 9. 22. 22:32

유니티 버전 - 2022.3.44f1

 

 

 

 

 

목차


  • 씬(Scene)이란?
    • Scene과 빌드 세팅
  • SceneDirector의 코드 및 설명
    • 코드
    • 설명
  • 마치며
    • 간단 정리
    • 참고하면 좋은 자료

 

 

 

Scene이란?


씬(Scene)이란 유니티에서 게임의 단일 장면을 의미합니다, 하나의 씬은 게임의 한 단계(레벨), 메뉴 화면 등 특정한 환경(게임 오브젝트와 구성요소)을 담고 있습니다, 씬에는 카메라, UI, 플레이어, 조명 등 다양한 요소가 포함될 수 있습니다

 

Build Setting은 게임을 배포하기 위한 설정을 관리하는 기능입니다, 여러가지 신경써야 할 것이 있지만 여기서는 Add Open Scenes를 이용하여 현재의 씬을 추가하고 순서를 지정하는 것만 하겠습니다

 

1. 버튼을 눌러 현재 열려있는 씬을 추가

 

 

 

1. 이동하고자하는 씬을 선택 후 드래그

 

 

 

2. 이동 후의 모습, 맨 우측의 숫자(Build Index)가 바뀌었음을 확인 할 수 있습니다

 

 

 

 

 

SceneDirector의 코드 및 설명


씬을 로드하기 위해서는 SceneManager.LoadScene을 사용합니다, 아래는 다양한 인수 타입을 이용해보았습니다

using 지시문

using UnityEngine;
using UnityEngine.SceneManagement; // SceneManager의 기능을 사용하기 위해 필요

 

 

 

1. LoadScene()

public void LoadScene()
{
    SceneManager.LoadScene("SingletonScene");
}

   

1. 가장 기본적인 형식으로 인수로 씬의 이름을 넣습니다

2. Project의 Assets 아래의 씬의 이름입니다

 

 

 

2. LoadSceneUsingBuildIndex()

    public void LoadSceneUsingBuildIndex(int p_BuildIndex)
    {
        SceneManager.LoadScene(p_BuildIndex);
    }

 

씬의 빌드 인덱스를 이용하여 씬을 전환합니다, 빌드 인덱스는 Build Settings에서 확인 가능합니다

 

 

 

3. LoadSceneUsingEnum()

    public void LoadSceneUsingEnum(SceneIndex p_SceneIndex)
    {
        SceneManager.LoadScene((int)p_SceneIndex);
    }

미리 정의된 Enum타입을 이용하여 씬을 전환합니다

 

 

 

4. LoadNextScene()

    public void LoadNextScene() // 주의
    {
        int currentBuildIndex = SceneManager.GetActiveScene().buildIndex;

        SceneManager.LoadScene(currentBuildIndex + 1);
    }

씬의 순서가 선형적이라면, 단순히 현재 빌드 인덱스에 1을 더하여 다음씬으로 이동합니다, 빌드 세팅에서 정의된 씬의 순서에 유의해야합니다

 

 

 

5. ReloadCurrentScene()

    public void ReloadCurrentScene()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }

현재의 씬을 다시 로드합니다, 씬을 재시작하는 방법으로 다양한 인수를 사용할 수 있습니다

 

 

 

6. LoadSceneAdditively()

    public void LoadSceneAdditively()
    {
        SceneManager.LoadScene("Scene Name", LoadSceneMode.Additive);
    }

현재 씬을 유지한 채로 새로운 씬을 추가합니다

 

 

 

 

 

마치며


씬의 로드 방법을 알아보았습니다, 언로드 메서드를 이용하여 열린 씬을 닫을 수 도 있습니다

 

하지만 SceneManager.LoadScene을 이용하여 씬을 로드하거나 언로드할때에 동기적으로 작동하여 게임이 멈춘것처럼 보이거나 씬 간의 전환이 부드럽지않아 사용자 경험을 저하시킬 수 있습니다.

 

다음에는 비동기 씬 관리로 씬을 전환하는 중에도 게임이 원활하게 진행될 수 있도록 하는 법을 알아보겠습니다

 

이상입니다.