【Unity】シーン(Scene)の使い方 切り替え・遷移では、Sceneについての基礎的な知識と使い方について説明しました。しかし、シーンの切り替えを管理するScenesManagetの最終的な実装ができていないため、説明していきます。
また、シーンの切り替え時に今のままでは、楽しさがないためエフェクトをかけてみましょう。
この記事でわかること
- 現在のシーン名前取得
- シーン切り替えマネージャープログラム
- 自作関数
- switch文
- シーン切り替えエフェクト
Contents
現在のシーンを取得する
【Unity】シーン(Scene)の使い方 切り替え・遷移では、SampleSceneからSphereSceneへの移動のみを実装していました。しかし、他のSceneの時も利用するためには、今どのSceneにいるかを知る必要があります。
1 |
SceneManager.GetActiveScene().name |
このコードを利用すると今いるSceneの名前(SampleSceneなど)を取得できます。
これを【Unity】シーン(Scene)の使い方 切り替え・遷移で作成したプロジェクトに取り入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class ScenesManagement : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKey(KeyCode.Space)) { var currentScene = SceneManager.GetActiveScene().name; SceneTransition(currentScene); } } void SceneTransition (string sceneName){ switch (sceneName){ case "SampleScene": SceneManager.LoadScene("SphereScene"); break; case "SphereScene": SceneManager.LoadScene("SampleScene"); break; } } } |
プログラムの説明
1 2 3 4 5 6 7 8 9 10 11 |
void SceneTransition (string sceneName){ switch (sceneName){ case "SampleScene": SceneManager.LoadScene("SphereScene"); break; case "SphereScene": SceneManager.LoadScene("SampleScene"); break; } } |
前提として、現在のSceneから遷移するSceneは1通りしかないとします。
SceneTransitionはScene遷移のために自作した関数です。sceneNameは引数と呼ばれ、関数を実行する際に利用する他からの入力です。今回は現在のSceneの名前が入ってきます。
switch文は条件分岐するために利用されます。sceneNameが○○なら■■するというcaseをいくつか書くことで実行できます。今回はSampleSceneとSphereSceneの2通り書いています。
新しいSceneが追加されたら、ここのcaseに追記していくことで拡張性が広がります。
1 2 3 4 5 6 7 8 |
void Update () { if (Input.GetKey(KeyCode.Space)) { var currentScene = SceneManager.GetActiveScene().name; SceneTransition(currentScene); } } |
Update関数では、SceneManager.GetActiveScene().nameにより現在のシーンをcurrentSceneという変数に入れて先ほど作成したSceneTransition関数に引数として入れて実行しています。
すべてのSceneにプログラムを追加して実行する
SphereSceneにもCreate Emptyで空のGameObjectを作成し、Add ComponentでScenesManagementを追加しましょう。
追加完了したら、プロジェクトを実行しましょう。
スペースキーを押すごとに見えているオブジェクトが箱と球に切り替わって入れば完了です。
GameObjectをプレハブ化してしまっても良いかもしれません。
Scene切り替え時のエフェクトを作成する
Scene切り替え時に急に切り替わるとプレイしているユーザが驚いてしまいます。
そのため切り替わる前後で画面を少しずつ暗くするアニメーションを追加します。Githubで後悔していただいているhttps://github.com/naichilab/Unity-FadeManager/blob/master/README.ja.mdを利用します。
使い方の説明通りに進めていきます。
- Zipファイルをダウンロード
- UnityメニューでAssets→Import Package→Custom Packageでファイルの中の「FadeManager.unitypackage」を選択します。
- naichilab/FadeManager/Prefabs/FadeManager をシーンに配置
- SceneManager.LoadScene の代わりにFadeManager.Instance.LoadScene()を利用する
プログラムを修正する
Scenesmanagermentをフェードイン・アウトできるように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class ScenesManagement : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKey(KeyCode.Space)) { var currentScene = SceneManager.GetActiveScene().name; SceneTransition(currentScene); } } void SceneTransition (string sceneName){ switch (sceneName){ case "SampleScene": FadeManager.Instance.LoadScene("SphereScene", 2.0f); //修正 break; case "SphereScene": FadeManager.Instance.LoadScene("SampleScene", 2.0f); //修正 break; } } } |
これで、フェードイン・アウトができました。
まとめ
Sceneの基礎からの発展としてScene切り替え用の管理マネージャーの実装をしました。
また、Scene切り替え時のアニメーションとしてフェードイン・アウトを追加しました。
Gifアニメーションだとぎこちなく見えますが、実際のプログラムでは綺麗に見えますので安心してください。切り替え時のアニメーションは、クオリティをあげる時の手っ取り早い方法ですね。
Sceneについてもっと知りたいかたはUntiyのリファレンスを一度みることをオススメします。
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html