LoginSignup
24
21

More than 5 years have passed since last update.

Unity Multi Scene EditingでUI作業分業

Posted at

自分用メモ。

前提

  • Unity 5.3 ~
  • Page単位の分割。細かいUIパーツごとの分業にはならないかも。
  • ScreenSpace - Cameraで表示
  • 2D UIで対応

結果

こんな感じ

overlay.png

説明

用意するScene

  • Common.unity
    • すべてのシーンに共通する要素を置く
    • 要素: Camera, EventSystem, 各種Singletonを含めたシーン
    • 編集時: 常にActiveなシーン(太字表示)として設定。どのUIを作るときにもActiveなシーンとして含めておく.
    • 実行時: 最初に読み込まれるシーンに設定する. ここから各種UIシーンを読み込むようにする.
  • Layer{1,2}.unity
    • 各UIのシーン
    • 例: Headerのシーン, Footerのシーン, ListViewのシーン, Dialogのシーンなど
    • 要素: Canvas, Image, Button, ..., Camera(編集時のみ有効)
    • 編集時: Activeでないサブシーンとして編集する. 他のUIシーンを一緒に含めつつ編集編集してもよいし、Common.unityだけ含めて編集してもよい。
    • 実行時: 最初によみこまれないようにする. 他のシーンからAdditiveに追加されるようにする

はまりどころ

Q. Scene管理どうするの?

SceneLoader.csみたいなスクリプトつくって、そこでAdditiveにシーン追加できるようにします。重複チェックもそこでおこないます。

Q. Canvasに設定する共通のカメラがほしいんだけど、どうする?

共通のカメラはCommonにおきます。
実行時に各Canvasのカメラの参照をCommonのカメラに切り替えます。
また編集時にカメラをUIに設定できてないと何かとわかりずらいので、各UIシーンにも編集時のみ有効なカメラを用意します。

Common.unity
- CommonCamera

Layer1.unity
- Canvas => 編集時: Camera1を参照. 実行時: CommonCameraを参照
- Camera1

Canvasにアタッチするスクリプト
- https://gist.github.com/mattak/b49bb8066f285123f963703c9f33a060#file-camerafinder-cs
- 実行時に各シーンのカメラを消して、Camera.mainに参照を切り替えてくれます

Q. UIの描画順序どうするの?

各UIシーンのCanvasのOrder in LayerかSorting Layerで切り替えます。

結論

  • 各UIシーンでCanvasを一つ所持
  • SceneをAdditiveに追加・削除することで全体UIの構築をする
  • 共通の要素を置くシーンを用意する (Camera, EventSystemなど)
  • 共通シーンを作り、共通Cameraはそこに置く。またRuntime時に参照解決する (CrossSceneReference)
  • 開発のプレビューに不便なので、開発中は各シーンにカメラを置いておきそれを参照する. 実行時もしくはリリース時に削除されるようにする
24
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21