Unity/기초 예제

유니티 씬 전환 SceneManager 간단한 예제 유니티 기초

최애뎡 2021. 6. 17. 19:50
728x90
반응형

이번 예제는 앞서 만들었던 간단한 게임에 이어서 진행됩니다.
일단 씬 전환을 위해 LoadScene이라는 새로운 스크립트를 만들고 코딩을 바로 시작합니다.

4번 줄을 통해 SceneManger을 사용할 수 있습니다.
8번 줄 static 변수의 경우는 Box를 제거할 때마다 변수를 1씩 증가시켜 3이 되면
현재 씬을 로드하여 게임을 재시작할 수 있게 하기 위함입니다.
Update() 안에 sceneLoadNumber가 3이 되었을 때 sceneLoadNumber을 다시 0으로 만들어주고
SceneManager.LoadScene(sceneName); 을 통하여 현재 씬을 로드해줍니다.
그렇다면 sceneLoadNumber는 어디서 올려주면 좋을까요?!
바로

bullet 스크립트가 가장 적절하지 않을까 합니다.
bullet이 Tag가 Box인 오브젝트와 충돌할 때에만 반응하기 때문입니다.
그러므로 여기에 LoadScene.sceneLoadNumber += 1;을 추가하여
bullet이 Box인 오브젝트와 충돌할 때
LoadScene 스크립트에 있는 sceneLoadNumber을 1씩 증가시켜줍니다.
이제 LoadScene 스크립트를 적용하여 주기만 하면 되겠죠?

GameManager를 따로 만들어도 되지만 작은 프로젝트이기에 간단히 Player에 적용시키고
게임이 끝난 후 load할 씬의 이름을 적어줍니다.
이제 실행 화면을 보도록 할까요?

?! 분명히 씬을 다시 로드하여 게임을 재시작해주고 있지만 맵이 어두워지는 걸 보실 수가 있습니다.
사실 이 프로젝트를 빌드하고 실행파일을  실행하면

이처럼 아무 문제없이 진행되는 걸 보실 수가 있습니다.
찾아보니 버그..라고 하더군요?! 음.. 뭔가 이유를 알고 싶었는데..
일단 해결책은 참 간단하였습니다.

유니티 메뉴 중 Window에서 Lighting -> Settings에 들어가신 뒤

하단 부분의 Auto Generate를 체크 해제하고 Generate Lighting을 누르시면 해결 끝입니다..
이렇게 하고 실행을 하면

Project 란에 Lighting Data가 생긴 걸 확신하실 수 있으며 유니티 Game 뷰 상에서도 아무 문제 없이 실행되는 것을 확인하실 수 있습니다.
여기서 SceneManager의 경우

https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html

 

Unity - Scripting API: SceneManager

Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close

docs.unity3d.com

을 참고하시면 더욱 도움이 되겠습니다.

반응형