シーンを読み込む
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 17/56。
Unityのゲームはシーンに分かれています。メニュー、各レベル、クレジットなどです。各シーンはそれぞれ独自のオブジェクトを持つ個別のファイルで、スクリプトはUnityEngine.SceneManagement名前空間のSceneManager.LoadSceneを使って別のシーンに切り替えます。Inspectorで設定されたこのメニューのPlayボタンを押すと、Forestレベルが開きます。
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public void Play()
{
SceneManager.LoadScene("Forest");
}
}Unityが読み込めるのは、ビルドのシーンリストに含まれているシーンだけです。Unity 6では、Scene Listの下にあるファイル > ビルドプロファイルで設定します(古いバージョンでは、このウィンドウはBuild Settingsと呼ばれます)。名前はシーンファイル名と完全に一致している必要があります。シーンがリストにない場合や、"Forrest"のような入力ミスがある場合、何も読み込まれず、コンソールにはScene 'Forrest' couldn't be loadedで始まり、そのシーンがビルドに追加されていないことを示すエラーが表示されます。ゲームはメニューにとどまります。
切り替えは即座には行われません。まず現在のフレームの残りが実行されるため、LoadSceneの後の行も引き続き実行されます。次のフレームの開始時に、Unityは古いシーンのすべてのオブジェクトを破棄して新しいシーンを構築し、そのスクリプトはAwakeとStartから再び開始します。
チャレンジ
簡単2つのポータルがあるハブ。このビルドには3つのシーンがあります: Hub(最初のシーン)、Desert、Glacier。Hubでは、一方のポータルがDesertへ、もう一方がGlacierへつながっており、それぞれのシーンにはHubへ戻るポータルがあります。すべてのポータルにPortalスクリプトがあり、Inspectorで各ポータルのsceneNameに移動先を設定します。矢印キーでPlayerを動かします(準備完了)。
Portal.csを作成します: Player(タグがPlayer)がポータルに入ったとき、そのポータルのsceneNameに指定されたシーンを読み込みます。
Playを押して、両方の場所を訪れてから、Checkを押します。
自分で試してみよう
using UnityEngine;
public class Portal : MonoBehaviour
{
public string sceneName;
// プレイヤーが入ったら、sceneName という名前のシーンを読み込む
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。