Unityでシーンを切り替える方法|SceneManager.LoadSceneの使い方
Unityでゲームを作っていると、1つの画面だけで完結することはあまり多くありません。
たとえば、
タイトル画面
ゲーム画面
ゲームオーバー画面
クリア画面
設定画面
のように、複数の画面を切り替えながらゲームを作っていくことがよくあります。
Unityでは、このような画面の単位を シーン と呼びます。
今回は、Unityでシーンを切り替える基本的な方法として、SceneManager と LoadScene の使い方を解説します。
シーンとは
Unityのシーンは、ゲームの1つの画面や場面を表すものです。
たとえば、次のようにシーンを分けることができます。
TitleScene
GameScene
ResultScene
TitleScene にはタイトル画面を作り、GameScene には実際にプレイするゲーム画面を作り、ResultScene には結果画面を作る、というイメージです。
ゲームが始まったらタイトル画面からゲーム画面へ移動し、ゲームが終わったらリザルト画面へ移動する。
このようなシーンの切り替えに使うのが、今回の SceneManager です。
SceneManagerとは
SceneManager は、Unityでシーンを管理するための機能です。
シーンを切り替えたり、今開いているシーンの情報を取得したりできます。
ただし、SceneManager を使うには、スクリプトの上の方(usingディレクティブ)に次の1行を書く必要があります。
using UnityEngine.SceneManagement;この1行を追加することで、SceneManager が使えるようになります。
シーンを切り替える基本形
シーンを切り替える基本形は、次のように書きます。
SceneManager.LoadScene("GameScene");これは、「GameSceneという名前のシーンを読み込む」という意味です。
たとえば、タイトル画面からゲーム画面へ移動したい場合は、次のようなスクリプトを作ります。
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneChanger : MonoBehaviour
{
public void GoToGame()
{
SceneManager.LoadScene("GameScene");
}
}GoToGame() が呼ばれると、GameScene に切り替わります。
シーン名は正しく書く
LoadScene の中に書くシーン名は、切り替えたいシーンの名前です。
SceneManager.LoadScene("GameScene");
この場合、Unityプロジェクトの中に GameScene という名前のシーンが必要です。
たとえば、シーン名が Game なのに、スクリプトで次のように書いてしまうと正しく動きません。
SceneManager.LoadScene("GameScene");この場合は、実際のシーン名に合わせて次のように書く必要があります。
SceneManager.LoadScene("Game");シーンをBuild Profilesに登録する
SceneManager.LoadScene でシーンを切り替えるには、基本的にそのシーンをビルド対象に登録しておく必要があります。
Unity 6以降では、Build Profiles からScene List に使用するシーンを登録します。
それ以前のエディタでは Build Settings になります。

手順は次のような流れです。
Unity上部メニューから File →Build Profiles を開く
使用するプラットフォームを選ぶ
Scene List に使いたいシーンを追加する
ここに登録されていないシーンは、実行時に読み込めないことがあります。
ボタンでシーンを切り替える
シーン切り替えは、UIボタンと組み合わせて使うことが多いです。
たとえば、タイトル画面に「スタート」ボタンを作り、そのボタンを押したらゲーム画面に移動する、という使い方です。
まず、次のようなスクリプトを作ります。
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneChanger : MonoBehaviour
{
public void GoToGame()
{
SceneManager.LoadScene("GameScene");
}
public void GoToTitle()
{
SceneManager.LoadScene("TitleScene");
}
}このスクリプトを、空のGameObjectなどに追加します。
次に、ボタンの On Click() にこのオブジェクトを登録し、呼び出したいメソッドを選びます。

スタートボタンなら、
SceneChanger.GoToGameタイトルへ戻るボタンなら、
SceneChanger.GoToTitleを選びます。
これで、ボタンを押したときにシーンを切り替えられるようになります。
現在のシーンをもう一度読み込む
ゲームオーバーになったときに、同じステージをもう一度やり直したいことがあります。
このようなときは、今開いているシーンを取得して、もう一度読み込みます。
SceneManager.LoadScene(SceneManager.GetActiveScene().name);少し長く見えますが、意味を分けると分かりやすいです。
SceneManager.GetActiveScene()これは、現在開いているシーン情報を取得しています。
SceneManager.GetActiveScene().nameこれは、現在開いているシーンの名前を取得しています。
SceneManager.LoadScene(SceneManager.GetActiveScene().name);と書くことで「今のシーン名を取得して、そのシーンをもう一度読み込む」という処理になります。
リトライ処理として使うなら、次のように書けます。
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneChanger : MonoBehaviour
{
public void Retry()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}ゲームオーバー画面の「もう一度」などのテキストを配置したボタンにこの Retry を登録すれば、現在のシーンを最初からやり直すことができます。
シーン番号で読み込む方法
LoadScene は、シーン名だけでなく、シーン番号で読み込むこともできます。
SceneManager.LoadScene(1);この番号は、Build Profilesに登録されているシーンの順番に関係します。

よく使うシーン切り替えスクリプト
最後に、よく使う形をまとめておきます。
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneChanger : MonoBehaviour
{
public void GoToTitle()
{
SceneManager.LoadScene("TitleScene");
}
public void GoToGame()
{
SceneManager.LoadScene("GameScene");
}
public void GoToResult()
{
SceneManager.LoadScene("ResultScene");
}
public void Retry()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
このようにしておくと、
タイトルへ戻る
ゲームを始める
結果画面へ移動する
現在のシーンをやり直す
といった処理を1つのスクリプトにまとめられます。
そのほかの便利な機能
今回は初心者向けの記事なので、基本の LoadScene と GetActiveScene が使えれば十分です。
ただ、SceneManagerには他にも便利な機能があります。
LoadSceneAsync
シーンを非同期で読み込む方法です。ローディング画面を作りたいときなどに使います。sceneLoaded
シーンの読み込みが完了したタイミングで処理を実行できます。UnloadSceneAsync
追加で読み込んだシーンをあとから閉じるときに使います。LoadSceneMode.Additive
今のシーンを残したまま、別のシーンを追加で読み込む方法です。SetActiveScene
複数のシーンを同時に読み込んでいるときに、どのシーンをメインとして扱うかを指定します。
これらは少し発展的な内容なので、最初から全部覚える必要はありません。
まとめ
今回は、Unityでシーンを切り替える方法を解説しました。
重要なのは、次の3つです。
using UnityEngine.SceneManagement;
SceneManager を使うために必要な1行です。
SceneManager.LoadScene("GameScene");
指定したシーンに切り替える処理です。
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
現在のシーンをもう一度読み込む処理です。
ゲーム制作では、タイトル画面、ゲーム画面、リザルト画面など、シーンを分けて作ることがよくあります。
SceneManagerを使えるようになると、画面の切り替えができるようになり、ゲーム全体の流れを作りやすくなります。
次回は、シーンを切り替えたときに出てくる問題を扱います。
通常、シーンを切り替えると、そのシーンにあるオブジェクトは削除されます。
しかし、BGMやスコア管理、GameManagerなど、シーンをまたいでも残したいオブジェクトもあります。
そこで次回は、
DontDestroyOnLoad(gameObject);を使って、シーンを切り替えても消えないオブジェクトの作り方を解説します。
Unity初心者向けの記事をテーマ別にまとめています。
▼ Unity初心者向け記事まとめはこちら
こちらのマガジン「ミニゲーム作成講座 全8回セット」でもシーンの切り替えなどを活用して、初心者でも知識ゼロから作れるミニゲーム作成講座を紹介しています。

さらにステップアップの「スマホで遊ぶジャンプゲーム 8回セット」のマガジンもぜひご活用ください。

ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!