Unityでマルチディスプレイ

Unityでフルスクリーンで画面を作成するとそのままでは1つのモニタにしか出力できないが、所定の設定とコードを記述することで複数のモニタに出力できるようになる。

詳細はここに全て書かれている。この通りにやれば問題なく出来ると思う。

けど全く何もわからない状態でやろうとしたら大変だったのでメモとして残す。

1.出力するモニタの分だけCameraを生成する

1つのカメラが1つのモニタとして動作するので表示させたいモニタ分だけCameraを生成する

2.Cameraの設定の「Target Display」を表示させたいモニタに設定する

ここの設定を変更する。最大で8枚まで表示できるようだ。
f:id:kidd0320:20210609152733p:plain:w400

ディスプレイの番号はWindowsに認識されている番号と一致しているようなので、それに合わせた番号を設定する。PCによってモニタの番号って変わってしまうのでそれに対応できないと1台ずつ専用のソフトを作らないといけなくなるので、何かしらの対策方法があると思う。けど今はやり方がわからないので諦めて先に進める。

3.複数ディスプレイを使うためのスクリプトを作成

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ActivateAllDisplay : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
		for(int i = 1; i < Display.displays.Length; i++)
		{
			Display.displays[i].Activate();
		}
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

こんなスクリプトを作成してメインカメラに紐づける。メインカメラでなくても適当なGameObjectを作成して紐づければOK。公式ドキュメントにはシーン開始時に行うと記述されているので、それに合わせる。

4.完成

これでBuild&Runを行えば設定したディスプレイに各カメラの映像が表示されるはず。デバッグ画面で各ディスプレイの確認をするには「Game」タブでDisplayを切り替えれば確認することができる。

f:id:kidd0320:20210609154452p:plain:w400

マルチディスプレイを奇麗につなげようとするとカメラの位置調整が難しいね。これも簡単にする方法あるかな?