【Unity】LoadSceneメソッドとは?シーンを切り替えることができる

Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのLoadSceneメソッドってなに?」

「LoadSceneってどうやって使えばいいの?」

というお悩みの方に向けた内容となっています。

Unityではゲームのシーンを切り替える際に、LoadSceneというメソッドを使います。

シーンとは、ゲームにおける画面のことで、例えば起動画面ゲーム画面クリア画面などそれぞれをシーンファイルとして保存しておきます。

ゲーム内で、これらのシーンファイルを切り替えたり、読み込ませたりするのにLoadSceneメソッドを使うことで、簡単にシーンの切り替えができるようになります。

そこで、このページでは、Unityでゲームを作る際に使うLoadSceneメソッドについて、どんな仕様や特徴なのか、また使い方や注意点までをまとめていきます。

なお、このページでは、

Windows11
Unity Hub3.11.1
Unity6

のバージョンで解説しています。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

LoadSceneメソッドとは?

まずは、LoadSceneメソッドがどんな時に使われるメソッドなのか、紹介していきます。

シーンファイルを読み込ませるメソッド

LoadSceneメソッドとは、シーンファイルを読み込ませる処理を行うメソッドです。

Unityでは、ゲーム内での画面毎にシーンファイルを作成していくことになります。

例えば、ゲームを起動した際の起動シーン、実際にゲームをプレイするゲームシーン、ゲームクリアした際のクリアシーンなどです。

LoadSceneメソッドを使うことで、それぞれのシーンを切り替えて表示させていくことができます。

プロジェクトに追加したシーンだけが読み込める

LoadSceneメソッドで読み込めるシーンは、プロジェクトに追加したシーンのみになります。

具体的には、ゲーム内のビルド設定にそのシーンファイルを登録しておく必要があります。

ビルド設定は、メニューバーの「File」から「Build Profiles」を選択します。

Build Profilesが開いたら、「Scene List」を選択して、Scene Listの中にシーンファイルをドラッグ&ドロップで追加しておきます。

このリストの中に、追加されているシーンのみLoadSceneメソッドで読み込むことができます。

LoadSceneメソッドの使い方

ここからは、LoadSceneメソッドの使い方を紹介していきます。

SceneManagementを加える

LoadSceneメソッドは、SceneManagerクラスで定義しているメソッドで、利用するためにはSceneManagementをスクリプト内で宣言して加えておく必要があります。

そのため、LoadSceneメソッドを使いたいスクリプト内の上部で、

using UnityEngine.SceneManagement;

と、記述しておきます。

なお、僕の使っているUnity6では、LoadSceneメソッドをスクリプト内に記述すると、自動的に上記のSceneManagementが追加されるので、特に対応しなくても大丈夫そうです。

LoadSceneメソッドの引数でシーンを設定する

LoadSceneメソッドは、引数に設定したシーンを読み込むという処理を行います。

具体的には、

SceneManager.LoadScene(遷移させたいシーン);

と書くことで、シーン遷移の処理が行われます。

この遷移させたいシーンは、「シーン名」もしくはビルド設定の「シーン番号」のどちらかで設定することができます。

▼シーン名で指定した場合

SceneManager.LoadScene("MainScene");	// MainSceneを読み込む処理

▼シーン番号で指定した場合

SceneManager.LoadScene(1);	// 1のシーンを読み込む処理

第二引数の指定で現在のシーンに別のシーンを追加することができる

LoadSceneメソッドには、第二引数を設定することができ、LoadSceneMode.Additiveと記述することで、現在のシーンに追加してシーンを読み込ませるということができます。

具体的には、

▼シーン名で指定した場合

SceneManager.LoadScene("MainScene", LoadSceneMode.Additive);	// MainSceneを追加で読み込む処理

▼シーン番号で指定した場合

SceneManager.LoadScene(1, LoadSceneMode.Additive);	// 1のシーンを追加で読み込む処理

上記のように、第二引数に設定してあげることで、別のシーンを追加することができます。

LoadSceneメソッドの注意点

ここからは、LoadSceneメソッドを使う際の注意点を紹介していきます。

現在のシーンのオブジェクトは全て消去される

LoadSceneメソッドでシーンを切り替える際は、LoadSceneMode.Additiveでシーンを追加する場合を除いて、現在のシーンのオブジェクトは基本的に全て消去されることになります。

ただ例えば、そのオブジェクトに設定していたHPライフスコアポイントなどの変数も、全て消去されることになります。

そこで、遷移した先のシーンでも、特定のオブジェクトだけを残して変数などを管理したい場合は、そのオブジェクトにDontDestroyOnLoadメソッドを使うことで、シーンが切り替わってもそのオブジェクトが消えなくなります。

そのため、HPやスコアなどのゲーム全体で管理するためのオブジェクトである「GameManager」を作る際に、DontDestroyOnLoadメソッドを使うことがあります。

同期処理なので重くなることがある

LoadSceneメソッドは、ゲーム内で同期処理によってシーン遷移が行われるようになるため、ある程度規模の大きいゲームの場合、読み込むまで時間がかかってしまい、真っ黒の画面で待つことがあります。

これを防ぐために、LoadSceneAsyncメソッドを使うことで、非同期読み込みでシーン遷移を行うことができます。

非同期読み込みとは、ゲームの裏側でシーン遷移の処理が行われるので、待ち時間の間はゲームを続けることができます。

そのため、ある程度大きな規模のゲームを作る際は、LoadSceneAsyncの方を使うようにしましょう。

まとめ

このページでは、Unityでよく使われるLoadSceneメソッドについて、特徴や仕様、また使い方から注意点までをまとめていきましたが、いかがでしたでしょうか?

LoadSceneメソッドとは、指定したシーンを読み込ませる処理を行うメソッドです。

LoadSceneメソッドを使う際は、

にしてあげることで、シーンを切り替えて表示させることができます。

また、規模の大きいゲームを作る場合は、非同期で読み込むことができるLoadSceneAsyncメソッドを使うようにしましょう。

最後までお読みいただきまして、ありがとうございました!

コメント