テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】Unityでマルチディスプレイする方法

f:id:tsubaki_t1:20151218224428j:plain
Unity 5.3でマルチディスプレイに対応したので、マルチディスプレイする方法について紹介します。

マルチディスプレイのための準備

マルチディスプレイを行う為には、幾つか準備が必要です。

まず、ディスプレイが二つ以上必要です。なにせマルチディスプレイですから。片方はラップトップ(ノートPC)でもOKですが、とにかく二つ以上です。

Unity側ではディスプレイは謙虚にも8個まで繋げる事が出来るみたいです。

f:id:tsubaki_t1:20151218224826j:plain

また、使えるのはスタンドアローン(PC向け)のみです。正確には、Windows/Linux/Macで動作するみたいです。
他のプラットフォームを選択中だと、マルチディスプレイの設定自体が非表示になります。

f:id:tsubaki_t1:20151218225303j:plain

またこれはMacですが、どうやらUnity 5.3f4の地点ではマルチディスプレイを使用するにはグラフィックAPIにOpenGL2を選択する必要があるみたいです。必要があるというか、バグっていてOpenGLCoreだとクラッシュします。
Auto Graphics API for Macのチェックを外すと、APIの優先順位を設定出来るようになります。

f:id:tsubaki_t1:20151218225553j:plain

マルチディスプレイを設定する

マルチディスプレイを設定していきます。
最初にエディタ内で画面を複数用意します。これは単純にGameビューを複数用意するって話です。

f:id:tsubaki_t1:20151218230243j:plain

Gameビューはビュー上の三からAdd Tabを選択しGameを選択すると、増やせます。

f:id:tsubaki_t1:20151218230047j:plain

あとは、どのGameViewをどのディスプレイに割り当てるかを決めます。Standaloneの場合はGameView上にディスプレイ番号があるので、それを使って選択します。
同一の番号の場合、内容がクローンされます。

f:id:tsubaki_t1:20151218230730j:plain

カメラを複数台設定する

カメラを複数台作成します。

f:id:tsubaki_t1:20151218231254j:plain

各々に割り当てるディスプレイ番号を設定します。もし同じディスプレイ番号をしている場合は、今まで通りDepthで描画順が決まります。

f:id:tsubaki_t1:20151218230922j:plain

これで各GameViewに各カメラが撮影した結果がそれぞれ反映されるようになりました。後は、実際にゲームで動かしてみます。

f:id:tsubaki_t1:20151218231411j:plain

マルチディスプレイを有効化する

マルチディスプレイを有効にするには、スクリプトが必要になります。
Display.displaysには認識している全てのディスプレイが表示されるので、それをActivate()してやればOKです。

gist.github.com

若干厄介なのがココで、ディスプレイ数が決まりきったシステムならば兎も角、ディスプレイ数が決まっていない場合は、ディスプレイに映すカメラの配置とかもココで調整する必要がありそうです。

また、何故かウィンドウモードで起動してからマルチディスプレイにした方が安定して動作する印象です。

マルチディスプレイにおけるマウス座標

マルチディスプレイでは、マウス座標を取得するためにはDisplay.RelativeMouseAt を使用します。ふざけたことに、これの戻り値x/yが座標、zがディスプレイ番号だそうです。

gist.github.com

なお、最もふざけたことはエディタで上のAPIが動作しないことです。

uGUIとマルチディスプレイ

最後にuGUIとマルチディスプレイについてです。

uGUIはScreenSpace-Overlayを使用している場合にどのディスプレイに映すのかを選択する項目が出現します。

f:id:tsubaki_t1:20151218234826j:plain

WorldSpaceやScreenSpace-Cameraはどちらも映すカメラを設定するので、ディスプレイ単位で選択することはありません。

面倒なのが、EventSystem標準で付いてくるモジュールがマルチディスプレイに対応していないらしく、2番以降のディスプレイに配置したUIに対して反応してくれません。

今後に期待…という事で。とりあえずコレもバグレポートかな

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp