Unityでシーンを遷移するときってヽ(゚∀゚)ノ パッと切り替わってしまって美しくないと思ったことありませんか?
中には自前でフェードのスクリプトを作っている方もいると思いますが、そんな時間がない!とかめんどくさがり屋の僕のような方にお得なアセットです。
本家URL
http://docs.ancientlightstudios.com/display/SCEMA/Scene+Manager
ページ内の動画でこんなことができるよ!というのが確認できます。
ちなみにAsset Storeで買った時点では$35でした。
使い方
インポートする
まずはAsset Storeからプロジェクトにインポートします。
シーンをいっぱい作る
- タイトル画面
- ステージ1
- ステージ2
- ステージ3
- ステージ4
- ステージ5
設定ファイルを作る
Scene Managerの設定ファイルは設置場所が決まっています。
「Resources」ディレクトリを作成し、その中に任意の名前でもう一つディレクトリを作成します。
今回は「Configuration」という名前で作ります。
作成したディレクトリ内で「右クリック→Create」を表示させ「Scene Configuration」を選択すると、
シーンを登録する
設定ファイルのInspectorをみるとこんなかんじです。
プロジェクト内のシーンファイルが全て見えるようになっています。
サンプルのシーンが邪魔です。
ボタンの説明をすると
- 「level」→ゲームでごりごり動くシーン
- 「screen」→タイトル画面や結果画面などあんまり動かないシーン
- 「ignore」→選択したシーンをゲームから外す
- 「First Screen」→最初の画面
- 「After last Level」→最後のレベルの後に遷移する画面
詳しくはこちら
これを
こんな感じに設定します。
設定したら「Activate」ボタンを押して設定を反映させます。
その後、おもむろに「File→Build Setting」を見てみると・・
なんと今設定したシーンがちゃんと登録されているではありませんか!ステキ!抱いて!
ラッパーをつくる
公式リファレンスによると、ラッパーを作れとのこと。
Assetに含んでおいてくれればいいのに。
using System;
using UnityEngine;
public class GameEnvironment {
private static GameEnvironment instance;
private SMSceneManager sceneManager;
public static GameEnvironment Instance {
get {
if (instance == null) {
instance = new GameEnvironment();
}
return instance;
}
}
public SMSceneManager SceneManager {
get {
return sceneManager;
}
}
private GameEnvironment() {
sceneManager = new SMSceneManager(SMSceneConfigurationLoader.LoadActiveConfiguration("{任意のディレクトリ名}"));
sceneManager.LevelProgress = new SMLevelProgress();
}
}
これを作っておくとどこからでもstaticで呼べます。
任意のディレクトリ名は先程Resourcesの下に作ったディレクトリ名を入れます。
今回の場合「Configuration」です。
ちなみにリファレンスにあるサンプルはtypoしてました。
シーンを遷移させる
今回は
タイトル→1→2→3→4→5→タイトル→1→2→・・・
このように遷移させたいと思います。
まずタイトルシーンから最初のレベルに遷移したいので
GameEnvironment.Instance.SceneManager.LoadFirstLevel();
ステージシーンでは次のステージに遷移したいので
GameEnvironment.Instance.SceneManager.LoadNextLevel();
これらをそれぞれシーン内のオブジェクトにくっつけます。
そしてできたサンプルが→こちら
少しイジってフェード以外の効果を出してみました。
しかしこの効果Mobileでは動かなかった・・
とはいえシーン管理はとてもしやすそうでいい感じです。
これからのアップデートに期待です。