여러 씬을 만들어 놓고 각 씬으로 전환하려고 할 때 다음과 같은 메소드로 씬을 전환할 수 있다. 씬 전환 시 오브젝트들은 초기 상태(위치,스크립트 등)로 돌아가고 Static 변수는 남아있다. 삭제된 오브젝트는 씬 전환을 하여도 돌아오지 않는다. (다시 씬으로 돌아왔을 때 보이고 싶다면 SetActive 메소드를 이용하여 숨김 처리를 하는 것이 좋다)

 

기본적인 씬 로딩 함수 이동하려는 씬이 완전히 로딩된 후에 이동하는 함수. 이 메소드를 사용하면 씬 로딩이 끝날 때 까지 화면이 멈춘 상태에서 대기하게 된다.

SceneManager.LoadScene(씬번호);

사용시 using UnityEngine.SceneManagement를 상단에 입력해야함

 

씬이 전환되는 동안 (로딩화면을 띄우고 싶은 경우 or 안 멈추게 하고 싶을 경우) 로딩 전용 공간을 프리팹으로 만든 뒤 로딩할 때 사용하는 카메라를 바꾸어 로딩 화면을 보여준다.

 

AsyncOperation async = Application.LoadLevelAsync(씬번호);

카메라 전환 코드

while (!async.isDone) //완전히 로딩이 될 때까지 반복문

{

yield return null;

}

 

AsyncOperation 클래스에는 로딩 상태와 관련된 메소드, 변수들이 있다.

AsyncOperation 멤버변수

bool isDone 로딩이 끝났는지 않끝났는지 확인할수 있는 변수(로딩 다되면 true)

float progress 로딩의 진행도를 나타내는 변수(1이 로딩 끝)

 

예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;
 
public class SceneChangeScript : MonoBehaviour {
    public GameObject camera1;    //기존 카메라
    public GameObject camera2;    //로딩 카메라
    public Slider slider;            //로딩 진행도를 알려줄 슬라이더 UI
    public int iTemp = 0;        //이동할 씬번호
    public GameObject fadeoutobj;
 
    void OnTriggerEnter(Collider other)
    {
    //Player 테그를 단 오브젝트와 충돌시 씬전환 코루틴 시작
        if (other.gameObject.tag == "Player")
        {
            StartCoroutine(SceneLoad());
        }
    }
    IEnumerator SceneLoad()
    {
        camera1.SetActive(false); //기존 카메라
        camera2.SetActive(true); //로딩화면에 있는 카메라
        yield return null;
    //씬 로딩 시작
        AsyncOperation async = Application.LoadLevelAsync(iTemp);
        while (!async.isDone)
        {
        //1프레임마다 검사
            yield return null;
        //로딩 진행도를 슬라이더 UI 값에 저장
            slider.value = async.progress;
            print(async.progress);
        }
    }
}
cs
 


+ Recent posts