레벨 다시 시작하기
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 18번째.
레벨을 초기화하는 가장 빠른 방법은 다시 불러오는 것입니다. SceneManager.GetActiveScene()은 현재 열려 있는 씬을 반환하고, 그 씬의 name(또는 buildIndex)을 LoadScene에 전달합니다. 게임 오버 패널에 있는 이 Restart 버튼은 다음을 호출합니다.
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}Unity는 열려 있는 씬을 파괴한 다음 씬 파일에서 다시 생성합니다. 플레이어가 넘어뜨린 상자를 포함해 모든 오브젝트가 씬에 배치된 위치로 돌아가고, 모든 필드가 다시 Inspector 값으로 설정되며, Awake와 Start가 다시 실행됩니다. 하나씩 원래 상태로 되돌리는 코드를 작성할 필요가 없습니다. 이 버튼은 "Level3"과 같은 이름 대신 활성 씬을 요청하므로, 같은 스크립트를 배치한 모든 레벨을 다시 시작할 수 있습니다.
static 필드는 씬의 일부가 아닙니다. 클래스에 속하므로 씬을 다시 불러와도 그대로 유지됩니다. private static float bestTime;은 다시 시작한 후에도 최고 기록을 유지하지만, 일반적인 private float time;은 새 씬과 함께 다시 0부터 시작합니다. GameManager.Instance도 static입니다. 씬을 다시 불러온 후에는 새 GameManager의 Awake에서 설정할 때까지 파괴된 GameManager를 가리킵니다.
챌린지
쉬움플레이어가 떨어지면 현재 레벨을 다시 시작하고 낙하 횟수를 세야 합니다.
using UnityEngine.SceneManagement;을 추가하고 횟수를private static int falls;로 바꿔 다시 불러와도 유지되도록 합니다.Update()에서player.position.y < fallY일 때falls++;를 실행하고SceneManager.GetActiveScene().name을 불러옵니다.
‘플레이’를 누르고 두 레벨에서 모두 가장자리 밖으로 걸어 나가세요. Falls: 1이 표시된 다음 Falls: 2가 표시됩니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
using TMPro;
public class LevelRestart : MonoBehaviour
{
public Transform player;
public TMP_Text fallsText;
public float fallY = -3f;
private int falls;
void Start()
{
fallsText.text = "Falls: " + falls;
}
void Update()
{
// fallY 아래로 떨어지면: 낙하 횟수를 세고 플레이어가 있는 레벨을 다시 시작한다
}
}
실제 게임 만들기의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드