Menu
CoddyTech

次のレベル

CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 19/56。

ビルド内のシーンリストにある各シーンには、ビルドインデックスという番号が割り当てられています。最初のシーンは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!");
    }
}

シーンが4つある場合、インデックスは0から3で、sceneCountInBuildSettingsは4です。そのため、最後のレベルではnextは4となり、範囲の末尾を超えます。だからテスト条件はnext < sceneCountInBuildSettingsです。LoadScene(4)を実行すると何も読み込まれず、UnityのエラーCannot load scene: Invalid scene name (empty string) and invalid build index 4がログに記録されます。

これで、すべてのレベルで1つの出口スクリプトを使えるようになり、どのスクリプトにもシーン名を指定する必要はありません。レベルを追加するには、そのシーンをリストに追加します。順番を変えるには、リスト内でシーンをドラッグして並べ替えます。

challenge icon

チャレンジ

簡単

ビルドには4つのシーンがあります。Menu(インデックス0)、続いてLevel1、Level2、Level3です。MenuのPlayボタンを押すとLevel1が開き、矢印キーでPlayerを操作できます(どちらも準備済みです)。各レベルにはGoalスクリプトが付いた金色のGoalがあります。シーン名を指定せずに、次のように記述してください。

  • Startで、このレベルの番号とレベル数をlevelTextにLevel 2 of 3の形式で表示します。Menuはレベルではありません。
  • Player(Playerタグ付き)がゴールに到達したら、リスト内の次のレベルを読み込みます。最後のレベルの後は、Menuに戻ります。

Playを押して、3つのレベルをすべてプレイしてから、Checkを押してください。

自分で試してみよう

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)
    {
        // プレイヤーがゴールに到達したら、次のレベルを読み込む。最後のレベルの場合はメニューを読み込む
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

本格的なゲームを作るのすべてのレッスン