게임 등을 플레이 하면서 맵이 바뀌는 경험을 해보았을 것이다.
유니티에서 이 기능인 씬 이동/전환을 해보자.
코드 상단에 using UnityEngine.SceneManagement;라는 SceneManagement를 이용하여 씬 전환을 할 수 있다.
씬 전환 [SceneManager.LoadScene]
ChangeScene
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ChangeScene : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
// Player 태그를 가진 오브젝트가 아니면 바로 반환
if (!other.CompareTag("Player"))
return;
// 현재 활성화된 씬이름을 얻는다.
Scene nowScene = SceneManager.GetActiveScene();
switch (nowScene.name)
{
case "FirstScene":
SceneManager.LoadScene("SecondScene");
break;
case "SecondScene":
SceneManager.LoadScene("FirstScene");
break;
}
}
}
트리거 이벤트를 사용하기 위해 Player 오브젝트가 아닌 씬 전환을 할 오브젝트(위치)에 isTrigger를 활성화 한다.
트리거이벤트에서 아무 오브젝트나 씬 전환을 시키지 않게 하기위해 "Player" 태그를 가진 오브젝트만 씬 전환을
할 수 있게 if문 조건을 걸어준다.
현재 활성화된 씬 이름을 얻어 nowScene에 담는다.
SceneManager.GetActiveScene();
스위치문에서 위에서 얻은 씬의 이름이 "FirstScene"이면 "SecondScene"씬으로 이동하고 "SecondScene"씬 이였다면 "FirstScene"으로 이동한다.
switch (nowScene.name)
{
case "FirstScene":
SceneManager.LoadScene("SecondScene");
break;
case "SecondScene":
SceneManager.LoadScene("FirstScene");
break;
}
각 씬에서 Portal이라는 오브젝트의 컴포넌트에 위에 작성한 스크립트를 컴포넌트로 넣어 Player 오브젝트가 닿았을 때
트리거이벤트로 씬 이동이 잘 이루어졌다.
만약 씬 이동이 되지않는다면 왼쪽 상단의 [File] - [Build Settings]에서 상단의 Scenes In Build에 프로젝트 뷰에 있는 씬들을 드래그해서 추가해주면 된다.
'개발 > Unity' 카테고리의 다른 글
[Unity] 포톤 클라우드 서버 에셋 다운로드 및 기본 세팅[Photon Cloud, Server] (0) | 2023.04.17 |
---|---|
[Unity] 2.5D 아이소메트릭 타일맵 그리기 [Isometric 2.5D TileMap] (1) | 2023.03.13 |
[Unity] 유니티 메서드 접근, 데이터저장 [Method(public, private, static) , PlayerPrefs] (0) | 2023.03.04 |
[Unity] 코루틴 [Coroutine] (0) | 2023.02.27 |
[Unity] 레이캐스트, 레이저 충돌 [Raycast] (0) | 2023.02.27 |