シーンを読み込む
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 17/60。
Unityのゲームはシーンに分かれています。メニュー、各レベル、クレジットなどです。各シーンは独自のオブジェクトを持つ個別のファイルで、スクリプトはUnityEngine.SceneManagement名前空間のSceneManager.LoadSceneを使って別のシーンに切り替えます。インスペクターで設定されたこのメニューの「プレイ」ボタンを押すと、Forestレベルが開きます。
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public void Play()
{
SceneManager.LoadScene("Forest");
}
}Unityが読み込めるのは、ビルドのシーンリストに含まれているシーンだけです。Unity 6では、Scene Listの下にあるFile > Build Profilesが該当します(古いバージョンでは、このウィンドウはBuild Settingsと呼ばれます)。名前はシーンファイルの名前と完全に一致していなければなりません。シーンがリストにない場合や、"Forrest"のような入力ミスがある場合、何も読み込まれず、ConsoleにScene 'Forrest' couldn't be loadedで始まり、そのシーンがビルドに追加されていないことを示すエラーが表示されます。その場合、ゲームはメニューにとどまります。
切り替えは瞬時には行われません。まず現在のフレームの残りの処理が実行されるため、LoadSceneの後の行も引き続き実行されます。次のフレームの開始時に、Unityは古いシーンのオブジェクトをすべて破棄して新しいシーンを構築し、そのスクリプトはAwake、Startから再び開始します。
チャレンジ
簡単各ポータルで、sceneNameが指定するシーンを読み込めるようにします。
Portal.csの先頭に、using UnityEngine.SceneManagement;を追加します。void OnTriggerEnter(Collider other)を記述します。other.CompareTag("Player")のとき、SceneManager.LoadScene(sceneName);を呼び出します。
「プレイ」を押して各ポータルに入ります。Desert、Hub、Glacierの順に読み込まれます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class Portal : MonoBehaviour
{
public string sceneName;
// プレイヤーが入ってきたら、sceneName という名前のシーンを読み込む
}
本格的なゲームを作るのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド