バージョン
Unity:2020.1.4f1
Scene遷移する方法(時間がない方向け)
まずは、時間がない方のためにかなりシンプルに遷移する方法を説明します!
はじめに
using UnityEngine.SceneManagement;
を忘れずにソースコードに追加しましょう!
あとは以下のコードを実行すれば画面遷移することができます
SceneManager.LoadScene("遷移したいScene名");
かなり簡単ですね笑
SceneManager.LoadScene()って他に何ができるのと思ったので少し詳しく調べてみました
SceneManager.LoadScene()について
SceneManager.LoadSceneのアセンブリを見ると
5つのオーバーロードがあることがわかりました
一つずつ見ていきましょう
SceneManager.LoadScene(Int32)
これは引数にScene番号を指定してやることでそのSceneに移動できるメソッドです
Scene番号というのは下画像の青枠内の番号です
SceneManager.LoadScene(Int32, LoadSceneMode)
第一引数は先ほどと同じですね、第二引数のLoadSceneModeは初めて出てきたので少し調べてみました
LoadSceneModeには「Single」と「Additive」の2種類あるみたいで、それぞれ以下のような違いがあります
※ちなみに上のSceneManager.LoadScene(Int32)のように第二引数を指定しなければSingleになるみたいです
Single
Scene遷移するときに現在のSceneを閉じて新しいSceneをロードする方法です
Additive
Scene遷移するときに現在のSceneを閉じずに新しいSceneをロードする方法です
実際に画面遷移してみると下画像のようにシーンがどんどん増えていきます
どんどん増え続けていくのはあまりよろしくないので、AdditiveしたSceneはアンロードする必要があります(Sceneのアンロードに関しては後述します)
SceneManager.LoadScene(String, LoadSceneParameters)
他のメソッドと違い、これは戻り値がSceneとなっているのでScene遷移するというよりは、何かしらのSceneを取得するといったほうが正しいんですかね
第一引数にはシーン名をいれれば良いことは想像できるのですが、第二引数のLoadSceneParametersに関してはより詳しく分かってから追記していきます!
SceneManager.LoadScene(String)
これは、SceneManager.LoadScene(Int)と違い、シーン名を指定することで画面遷移を行うことができるメソッドです
SceneManager.LoadScene(String, LoadSceneMode)
これも先ほど説明したSceneManager.LoadScene(Int32, LoadSceneMode)と同じなので省略します。
違いは遷移先のSceneをシーン名で指定するか、シーン番号で指定するかの違いです!
Sceneのアンロードについて
Additiveして、使わなくなったシーンは明示的にアンロードしなくてはなりません
その方法を記載していきます。昔は、
SceneManager.UnloadScene("アンロードしたいScene名");
でできたのですが、今は非推奨となっているので「SceneManager.UnloadSceneAsync()」を使いましょう、(Asyncとついているのでおそらくこれは非同期処理ですね)
SceneManager.UnloadSceneAsync()について
あまり詳しくないので調べてみると、6個のオーバーロードがありました
上から順番にみていきましょう
SceneManager.UnloadSceneAsync(Scene, UnloadSceneOptions)
第一引数:Scene
先ほど出てきたSceneManager.LoadScene(String, LoadSceneParameters)などでSceneを取得することができます
第二引数:UnloadSceneOptions
正直よくわからないのですが、以下の2種類設定することができてそれぞれ
・UnloadSceneOptions.None:シーン内の全てのオブジェクトをアンロードする
・UnloadSceneOptions.UnloadAllEmbeddedSceneObjects:他のシーンで参照できるアセットをアンロードしない
って感じなのかな?
SceneManager.UnloadSceneAsync(String, UnloadSceneOptions)
これは先ほど説明したものの第一引数がStringになったものですね(第二引数は省略します)
第一引数:String
シーン名を指定することでそのシーンをアンロードする
SceneManager.UnloadSceneAsync(Int, UnloadSceneOptions)
これも先ほど説明したものの第一引数がIntになっただけのものですね(第二引数は省略します)
第一引数:Int
シーン番号を指定することでそのシーンをアンロードする
SceneManager.UnloadSceneAsync(Scene)
特にオプションを指定せずに、特定シーンのアンロードを行います
SceneManager.UnloadSceneAsync(String)
特にオプションを指定せずに、指定シーン名のアンロードを行います
SceneManager.UnloadSceneAsync(Int)
特にオプションを指定せずに、指定シーン番号のアンロードを行います