異なるシーン間を移動する
今まではずっと単一のシーンで制作してきましたが、タイトル画面や違うレベルの画面(フィールド←→ダンジョンなど)を制作する場合、別のシーンにすることが多いでしょう。今回は、こうしたシーン間の遷移を実装していきます。
というわけで、仮のタイトル画面を用意しました。タイトル画面で何かキーが押されたら、レベル画面へ遷移させます。
シーン名は以下のようにしておきます。
- 今まで作ってきたレベル画面:sandbox_level
- タイトル画面:sandbox_title
また、Build Settings にこれらのシーンを追加しておくのを忘れないでください。
Loading Scene Manager
ここで、本講座で初めて、スクリプトが出てきます! 以下のようなスクリプトを書いてみましょう。
// SceneTransition.cs using UnityEngine; public class SceneTransition : MonoBehaviour { void Update() { if (Input.anyKeyDown) { // ここでシーン遷移 } } }
そして、タイトル画面に空の GameObject を作成し、スクリプトをアタッチしてください。
スクリプト中のコメントにもあるように、Input.anyKeyDown
が true になったらシーンを遷移させるようにします。Unity 標準のSceneManager.LoadScene
を使うこともできますが、ここでは TopDown Engine に備わっている機能を使ってみます。と言っても使い方は簡単で、以下の関数を実行するだけです。
MoreMountains.Tools.LoadingSceneManager.LoadScene("scene_name");
MoreMountains.Tools とは、More Mountains 製の Unity アセットで共通して使われている、様々な汎用的な機能のことです。シーン遷移はトップダウンビューのゲームに限らずあらゆるゲームで使われる機能なので、TopDownEngine ではなく MoreMountains.Tools にまとめられているのですね。
では、上記のスクリプトを SceneTransition.cs に追記しましょう。
// SceneTransition.cs using MoreMountains.Tools; using UnityEngine; public class SceneTransition : MonoBehaviour { void Update() { if (Input.anyKeyDown) { // ここでシーン遷移 LoadingSceneManager.LoadScene("sandbox_level"); } } }
それができたら、タイトル画面のシーンを再生して、シーン遷移ができるかどうか確認してみてください。
Unity 標準の SceneManager と、More Mountains の LoadingSceneManager の違い
再生してみたら分かるとおり、特に何もしなくてもシーン遷移中にローディング画面が挿入されます。
Unity 標準の SceneManager を使う場合は自分でローディング画面を実装する必要がありましたが、LoadingSceneManager を使えばその必要も無いわけですね。
もちろん、ローディング画面をカスタマイズすることも可能です。ローディング画面のシーンは ThirdParty/MoreMountains/MMTools/Tools/SceneLoading/LoadingScreen.unity にありますので、ロゴをオリジナルのものにしたり、プログレスバーを好みのデザインに変えたりしても良いでしょう。
NEXTTopDown Engine 入門 Part 9 ~シーン遷移編 2~
PREVTopDown Engine 入門 Part 7 ~UI 編~