前書き
同じシーン(ステージ)にあるカメラの範囲を切り替えて部屋から部屋に移動する方法を以前紹介しましたが、今回はシーン(ステージ)をから別の新しいシーン(ステージ)に変更する方法を紹介しようと思います。
以前紹介したカメラの領域を変える方法は以下になります。
Unityのファイル的にはシーン(Scene)、ゲーム的にはステージ(Stage)と用語がごちゃ混ぜになりますが、Unityのファイル的に遷移することを指すため本記事では以降、シーン(Scene)で統一しようと思います。
下準備
今回はシーンからシーンへ遷移するため事前にBuildをしておく必要があります。
以下は参考例ですが、シーンの遷移先(今回で言うところの01_LevelSelectStage)とロード画面(今回で言うところのLoadingScreen)にチェックを入れた状態でBuildをしておく必要があります。
TopDown Engineを入れたばかりであれば、TopDown Eningeのシーンにチェックが入った状態になっていると思うので1度Buildをしておけば問題ないかなと思います。
やり方
Topdown Engineの場合、いろいろなスクリプトがあるので組み合わせ次第で何通りかのやり方が存在します。あまり複雑にならないようなやり方を2パターン紹介しますので、好みで使い分けていただければいいかなと思います。
パターン1:GoToLevelEntryPointスクリプトを使う
いつものように、TopDown EngineのDemoシーンから見ていきましょう。
MinimalSandbox2Dの中に「Minimal2DGateToNextLevel」というオブジェクトがあるためこちらを確認してみてください。以下のオブジェクトになります。
The orange door above
will take you to the next level in this demo.
とあるように、このオブジェクトにプレイヤーが触れると次のシーンに遷移するような設定になっています。Minimal2DGateToNextLevelに付与されているスクリプトを見ると以下のようになっています。
Level Nameが次に遷移するSceneの名前になります。上記の画像では「01_LevelSelectStage」になっていますが、ここには遷移させたいシーン名を設定してください。この状態で実行すると
- プレイヤーがMinimal2DGateToNextLevelに触れる
- ロード画面に遷移する
- 遷移先(01_LevelSelectStage)に遷移する
という形でシーンが遷移するようになります。
パターン2:LevelSelectorスクリプトを使う
もう一つのやり方としてはLevelSelectorスクリプトを使う方法になります。
使い方としては
- 対象のオブジェクトにLevelSelectorスクリプトを付与する。
- LevelNameに遷移先のシーン名(今回で言うと10_Stage1)を設定する
- ButtonActivatedなど対象のオブジェクトに触れた時にEventを実行するスクリプトに
LevelSelectorのGoToLevelスクリプトを実行するように設定する
上記のように設定することで対象のオブジェクトに触れるとシーンの遷移をすることができます。
どちらを使う?
パターン1のGoToLevelEntryPointスクリプトは1つのスクリプトのまとまっているので管理のしやすさやあると思います。またパターン2のLevelSelectorスクリプトはロード画面を呼び出さずにシーンの遷移は設定できるなどシーンの遷移方法を変えることができます。
簡単に言うと
- パターン1:GoToLevelEntryPointスクリプトを使う
→1つのスクリプトで完結するため管理が楽。ただしロード画面を呼び出す。 - パターン2:LevelSelectorスクリプトを使う
→2つのスクリプトを設定する必要がある。ただしロード画面を呼び出さないなどできる。
と違いがあるため好みで使い分けていただくといいかなと思います。
まとめ
今回はTopdown Engineでシーンを遷移させる方法について紹介しました。
オブジェクトにプレイヤーが触れるとシーンを遷移させる方法についての紹介になりましたが、似たような方法でボタンクリックでも同様に実装することができます。その場合はLevelSelectorスクリプトを使うことでボタンが押された時にGoToLevelを呼び出すようにすればボタンクリックでもシーンを遷移させることができます。
既存のスクリプトでがいろいろあるのでゲームの実装方法に合わせて使いやすいやり方で使っていただければいいかなと思います。
コメント