다음 레벨
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 19번째.
빌드의 장면 목록에 있는 각 장면에는 번호, 즉 빌드 인덱스가 있습니다. 첫 번째 장면은 0, 다음 장면은 1이며 이런 식으로 이어집니다. LoadScene은 이름뿐 아니라 이 번호도 받으며, SceneManager.sceneCountInBuildSettings는 목록에 장면이 몇 개 있는지 알려 줍니다. 목록에서 레벨이 순서대로 배치되어 있다면 다음 레벨은 활성 장면의 인덱스에 1을 더한 값입니다. 이 출구는 다음 레벨을 불러오고, 마지막 레벨 이후에는 멈춥니다:
void OnTriggerEnter(Collider other)
{
if (!other.CompareTag("Player")) return;
int next = SceneManager.GetActiveScene().buildIndex + 1;
if (next < SceneManager.sceneCountInBuildSettings)
{
SceneManager.LoadScene(next);
}
else
{
Debug.Log("You finished the game!");
}
}장면이 네 개라면 인덱스는 0부터 3까지이고 sceneCountInBuildSettings는 4입니다. 따라서 마지막 레벨에서 next는 4가 되어 목록 끝에서 하나를 넘어갑니다. 그래서 테스트 조건은 next < sceneCountInBuildSettings입니다. LoadScene(4)를 호출하면 아무것도 불러오지 못하고 Unity 오류 Cannot load scene: Invalid scene name (empty string) and invalid build index 4가 로그에 표시됩니다.
이제 하나의 출구 스크립트를 모든 레벨에서 사용할 수 있으며, 어느 스크립트에도 장면 이름이 지정되어 있지 않습니다. 레벨을 추가하려면 해당 장면을 목록에 추가하고, 순서를 변경하려면 목록에서 장면을 드래그하면 됩니다.
챌린지
쉬움각 목표 지점에서 다음 레벨로 이동하도록 하세요.
Start()에서levelText에"Level " + level + " of " + levels를 표시하세요.level은 활성 장면의buildIndex이고,levels는SceneManager.sceneCountInBuildSettings - 1입니다.OnTriggerEnter에서 플레이어가 들어오면buildIndex + 1을 불러오세요. 단, 그 값이sceneCountInBuildSettings보다 작지 않으면0(메뉴)을 불러오세요.
‘플레이’를 누르고 세 레벨을 모두 완료하세요. 메뉴로 돌아옵니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
public class Goal : MonoBehaviour
{
public TMP_Text levelText;
void Start()
{
// "Level 2 of 3" 표시: 현재 레벨 번호와 전체 레벨 수
}
void OnTriggerEnter(Collider other)
{
// 플레이어가 목표 지점에 도달하면 다음 레벨을 불러오고, 마지막 레벨이면 메뉴를 불러온다
}
}
실제 게임 만들기의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드