はじめに
今回はマルチシーンエディティングを使ってみようという記事になります。
複数シーン編集によって、複数のシーンを同時にエディター上で開くことが可能になり、実行時でも簡単に複数シーンを管理できるようになりました。
エディターで複数のシーンを同時に開けることは、大規模な世界を構築するのを可能にし、ワークフローの改善にも繋がります。
UIとステージを別々のシーンで作成したり、ステージを分割して必要なシーンだけロードするといった使い方をすることができます。
以前から知ってはいたのですが、実際に手を出したことがなかったのでこれを機に触ってみたいと思います。
マルチシーンエディティングの概要
マルチシーンエディティングでは以下のように複数のシーンを同時に管理することができます。
複数シーンが存在する時、ActiveSceneというものが存在します。
- ActiveSceneにのみゲームオブジェクトを作成(インスタンス化)することができる
- 必ず一つ存在する
ただしActiveなシーンからゲームオブジェクトを移動すること(D&D)はできるし、スクリプトからもゲームオブジェクトを移動させる(ルートオブジェクトのみ)こともできます。
Unity - Scripting API: SceneManagement.SceneManager.MoveGameObjectToScene
実際にやってみる
マルチシーンエディティングのやり方は簡単で、あるシーンが開いている状態でProjectView
からHierarchy
にドラッグ&ドロップすればOKです。
スクリプトから他のシーンを追加したい場合はSceneManager.LoadScene
メソッドの引数にLoadSceneMode.Additive
を指定します。(非同期ならLoadSceneAsync
)
SceneManager.LoadScene("SceneB", LoadSceneMode.Additive); SceneManager.LoadSceneAsync("SceneC", LoadSceneMode.Additive);
削除したいときはSceneManager.UnloadScene
メソッド(非同期ならUnloadSceneAsync
)を使います。
SceneManager.UnloadScene( "ScenB" ) SceneManager.UnloadSceneAsync( "ScenC" )
これら方法からシーンを追加した場合は、ActiveScene
は入れ替わらないことに注意してください。
ActiveSceneを切り替える
エディタでActiveScene
を切り替えるには、Herarchy
上にてActiveScene
にしたシーンを右クリックしSet Active Scene
を選択することでできます。
スクリプトで変更したいときはSceneManager.SetActiveScene
メソッドを使います。
SceneManagement.SceneManager-SetActiveScene - Unity スクリプトリファレンス
SceneManager.SetActiveScene(SceneManager.GetSceneByName("SceneB");
読み込んだ後にActiveScene
に切り替えたいならこんな感じ。
var asyncLoad = SceneManager.LoadSceneAsync("SceneB", LoadSceneMode.Additive); asyncLoad.completed += x => SceneManager.SetActiveScene(SceneManager.GetSceneByName("SceneB"));
シーンに紐づく設定
公式ドキュメントではこのように書かれています。
複数のシーンを開いた場合、レンダリングとナビメッシュに使用される設定はアクティブなシーンのものです。
このレンダリングという言葉がどこまでの範囲を指すのか分かりませんが、直前に紹介されていたこれらはおそらくアクティブなシーンものを用いると思います。
- RenderSettings と LightmapSettings(両方ともライティングウインドウにあります)
- NavMesh 設定
- Occlusion Culling Window にあるシーン設定
シーン間での参照
シーン間での参照にはシングルトンを用います。
追記)わかりやすい記事があったので共有しておきます。
https://madnesslabo.net/utage/?page_id=11109#i-13
UIのカメラの設定
これらの記事に分かりやすく紹介をされていました。
どのようなシーン毎に分割するのかは自由ですが、特にCanvas
のScreen Space – Camera
はハマりポイントだと思うので参照してみると良いと思います。
さいごに
一通りマルチシーンエディティングで必要そうな箇所を挙げてみました。
シノアリスというゲームでのマルチシーンエディティングの実用例が以下の記事で紹介されていました。
gamebiz.jp
例えばクエストシーンでは以下の3つにシーンを分割しているようです。
- フィールドシーン
- UIシーン
- ロジックシーン
このように設計することでより疎結合な設計にすることができ、開発スピードも上がるとのことです。
これくらい上手に活用できるように目指してこれからもちょくちょく使いながら勉強していきたいと思います。
ではまた。