여러 씬을 만들어 놓고 각 씬으로 전환하려고 할 때 다음과 같은 메소드로 씬을 전환할 수 있다. 씬 전환 시 오브젝트들은 초기 상태(위치,스크립트 등)로 돌아가고 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 |
'프로그래밍 > Unity' 카테고리의 다른 글
(유니티) 뷰포리아 (0) | 2018.03.21 |
---|---|
(유니티) 립모션(leapmotion) 간단한 충돌 예제 (0) | 2018.03.21 |
(유니티) 스크립트 - 코루틴 사용 방법 (0) | 2018.03.21 |
(유니티)PC - 웹캠 이용하는 심플 코드 (0) | 2018.03.21 |
(Unity) 구글 카드보드 환경구축 (0) | 2016.07.09 |