Menu
CoddyTech

シーンを読み込む

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から再び開始します。

challenge icon

チャレンジ

簡単

各ポータルで、sceneNameが指定するシーンを読み込めるようにします。

  1. Portal.csの先頭に、using UnityEngine.SceneManagement;を追加します。
  2. void OnTriggerEnter(Collider other)を記述します。other.CompareTag("Player")のとき、SceneManager.LoadScene(sceneName);を呼び出します。

「プレイ」を押して各ポータルに入ります。Desert、Hub、Glacierの順に読み込まれます。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Portal : MonoBehaviour
{
    public string sceneName;

    // プレイヤーが入ってきたら、sceneName という名前のシーンを読み込む
}

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

自分で練習してみよう: Unityプレイグラウンド