次のレベル
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つの出口スクリプトを使えるようになり、どのスクリプトにもシーン名を指定する必要はありません。レベルを追加するには、そのシーンをリストに追加します。順番を変えるには、リスト内でシーンをドラッグして並べ替えます。
チャレンジ
簡単ビルドには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)
{
// プレイヤーがゴールに到達したら、次のレベルを読み込む。最後のレベルの場合はメニューを読み込む
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。