Unity 入門 シーンの切り替え

アイキャッチ 入門

ゲームを作っていると、複数のシーンが必要になってきて

特定のタイミングでシーンを切り替えたい、ってことが日常的にあります。

というわけで、シーンの切り替え方法を紹介します。

一度知ってしまえば、なんでもないことですが、初心者の方にはわかりづらい点もあります。

それでは、以下、解説。

Build Settings にシーンを追加しておく

これは結構、忘れやすい部分です。

この設定をしていないと、シーンをロードしようとしても失敗します。

設定方法は簡単で、メニューから File → Build Settings を選択します。

すると、こんなウィンドウが開きます。

BuildSettings

そしたら、Scenes In Build のところにプロジェクトウィンドウから

必要なシーンをドラッグ&ドロップします。

シーンの追加

これでOKです。

スクリプトで SceneManager を呼び出す

SceneManager というシーン管理クラスが用意されているので、これをスクリプトで呼び出します。

シーンのロード方法は2つあります。

LoadScene      … シーンをロードします。
LoadSceneAsync … 非同期でシーンをロードします。

どちらもシーンの名前かインデックス番号を指定して、ロードします。

インデックス番号でロードする場合は、上で説明した Scenes In Build の右側に出ていた数字を使用します。

ただ、シーンを入れ替えたりして番号が変わると、修正が面倒なので通常は名前で指定します。

シーンインデックス

あと、スクリプトの先頭あたりに

using UnityEngine.SceneManagement;

を追加するのも忘れずに。

LoadScene と LoadSceneAsync の使い分け

LoadScene はロードが完了するまで、他の処理をブロックします。

そのため、重いシーンをロードすると、ごく短時間ではありますが、ゲームが一時停止します。

なので、使いどころとしては画面がブラックアウトしている間などの

パフォーマンスがとくに重要ではないところが適しています。

LoadSceneAsync は非同期ロードなので、ゲームが一時停止することはありません。

前のシーンから次のシーンへ、スムーズに遷移したいところで使います。

注意

LoadSceneAsync を使っても、シーンに大量のゲームオブジェクトが配置してあるような場合は

ゲームオブジェクトを作成するときに大きな負荷がかかり、ゲームが一時停止してしまいます。

そんな時は、シーン開始時にコルーチンを使って分散して生成するなどして、1フレームに大量の生成が

行われないようにしましょう。

Additive で現在のシーンに追加する

LoadScene、LoadSceneAsync の第2引数では LoadSceneMode を指定することができます。

指定できるのは、Single と Additive です。第2引数を省略すると Single になります。

Single はロード完了時に現在のシーンを閉じてしまいますが、

Additive は現在のシーンに追加する形でロードされます。

どういうことを言っているかというと、こういうことです。

LoadSceneModeSingle

LoadSceneMode.Single

LoadSceneModeAdditive

LoadSceneMode.Additive

まとめ

では、まとめてみます。

  • LoadScene は固まっても大丈夫な場面で使おう!
  • LoadSceneAsync を使ってもシーンに大量にオブジェクトを配置してると止まるよ!
  • 現在のシーンに別のシーンを追加したいなら、Additive を使おう!
  • 使うシーンを Build Settings で追加しておくことを忘れずに!

以上! おしまい。



コメント

タイトルとURLをコピーしました