はじめに
1つのHierarchy上に複数のSceneが存在する場合の描画順や、ActiveSceneが切り替わった際のUIの描画順について気になったのでまとめてみました。
環境
OS : Windows10
Unity バージョン : 2021.3.2f1
SetActiveSceneとは
SceneManagerの関数で、引数で指定したSceneをHierarchy上でアクティブにします。
SetActiveScene (SceneManagement.Scene scene)
ここで言うアクティブというのは、LoadSceneでSceneを読み込むということではありません。
複数のSceneがHierarchy内にある場合、その内の1つがHierarchy上で太字になります。
(以下の場合は、Scene1がアクティブな状態)
このアクティブな状態というのは勝手に切り替わるわけではなく、例えば、Scene1がアクティブの状態でScene2内にあるUIを触ってもHierarchy上ではScene1がアクティブな状態のままになります。
そこで使用できるのがSetActiveScene
ということになります。
使用例
現在触っているSceneによって処理を書き換えたい場合に使用できます。
例えば、SetActiveScene
を使用せずに以下の処理を実行しますと、最初のif文にしか入りませんが、SetActiveScene
を使用することで、Sceneごとに処理を分けることができます。
if(SceneManager.GetActiveScene().name == "Scene1")
{
// Scene1でやりたい処理
}
else if(SceneManager.GetActiveScene().name == "Scene2")
{
// Scene2でやりたい処理
}
UIの描画順
アクティブなSceneを切り替えたことによりUIの描画順が変わるかについてですが、結論、変わりません。
実際に以下の例で確認します。
Scene1にあるButton1を押すと、Button2を持つScene2が同じHierarchy内に表示されます。
このとき、アクティブなSceneはHierarchy上で太字になっているScene1です。しかし、UIはScene2のButton2がScene1のButton1より上に描画されています。
Button2を押すとSetActiveScene
でアクティブなSceneをScene2に切り替えていますが、描画順は変化しません。
Button1を押しても同様で、アクティブなSceneがScene1に切り替わりますが、描画順は変化しません。
まとめ
- Sceneをアクティブな状態にするには、SetActiveSceneが使用できる
- アクティブなSceneを切り替えても描画順に変化はない