うら干物書き

ゲームを作っています。

【Unity】画面分割とマルチディスプレイ

 ゲームを皆で遊べば楽しいですよね。
 複数人で遊べるゲームを作る場合、一画面に収まるタイプのゲームならいいのですが、プレイヤー一人につき一画面必要な場合だってあるわけです。
 そうなると、画面をプレイヤー人数分で分割するか、プレイヤー人数分のディスプレイを用意して表示する必要がありますね。
 なんとなくやってみましょう。

 まあ、ぼっちの僕には何も関係のない話ですがね。


この記事にはUnity2017.2.0f3を使用しています。

画面を分割する

 まず画面を分割してみましょう。
 CameraコンポーネントのViewportRectの値を変更することで、カメラの画面表示位置とサイズを変更できます。

f:id:urahimono:20171126010609p:plain

 ちなみに、Viewportは左下が(0,0)、右上が(1,1)になりますよ。

f:id:urahimono:20171126010618p:plain

 下記の画像のように値を設定すれば、ディスプレイの左四分の一にカメラの映像が表示できます。

f:id:urahimono:20171126010630p:plain

 カメラをあと三つ用意して、ViewportRectをいい感じの値に設定すればいい感じに四分割できます。

f:id:urahimono:20171126010644p:plain

複数のディスプレイに表示する

 次にプレイヤー人数分のディスプレイを用意し、各カメラの映像を表示する方法にも挑戦してみましょう。
 まあ、Unityでそれが出来る云々よりも、プレイヤー人数分のディスプレイを用意するほうが大変なような気がしますが。

 ドキュメントを確認しておきましょう。
docs.unity3d.com

 マルチディスプレイをする場合には、CameraコンポーネントのTargetDisplayを設定しましょう。

f:id:urahimono:20171126010657p:plain

 画面を分割する時と違って、エディタ上ではGameビューには一つのカメラの様子しか表示されないため、このままでは確認できません。
 エディタ上で確認する時は、Gameビューを必要分だけ増やしてあげる必要があります。

f:id:urahimono:20171126010725p:plain
f:id:urahimono:20171126010737p:plain
f:id:urahimono:20171126010749p:plain

 最後にディスプレイをアクティベートする必要があります。

using UnityEngine;

public class GameController : MonoBehaviour
{
    [SerializeField, Range( 1, 8 )]
    private int m_useDisplayCount   = 4;

    private void Awake()
    {
        int count   = Mathf.Min( Display.displays.Length, m_useDisplayCount );

        for( int i = 0; i < count; ++i )
        {
            Display.displays[ i ].Activate();
        }
    }

} // class GameController

 これでマルチディスプレイの完了です。

試してみた

 というより前に作ったドミノゲームで、既に試してはいるのですけどね。
 画面を分割するとこんな感じになりました。

f:id:urahimono:20171126010821p:plain

 簡単に出来るのですが、表示するディスプレイが小さいと分割した画面がめっさ小さくなる欠点があります。
 ノートパソコンのディスプレイの大きさではちょっと厳しいんですよねー。

 マルチディスプレイの場合だとこんな感じになりました。

f:id:urahimono:20171126010833j:plain

 プレイヤー一人に対して画面が一つあるので、分割の時と違って画面が大きくわかりやすいですね。
 ただ、ディスプレイを人数分用意するのが手間過ぎる。
 それに聖書であるテラシュールブログさんでも言及されていますが、UIもディスプレイ毎に用意せねばなりません。

tsubakit1.hateblo.jp

 超面倒くさい。
 まあ、同じUIのPrefabを用意してあげればいいんですが、それでも面倒くさい。

 そして、USB3.0接続のモバイルディスプレイでは転送速度にちょっと難がある。
 モバイルディスプレイを使ってアクションゲームはちょっと厳しかった。

 また複数人で遊べるゲームを作りたいものです。
 まあ冒頭でも言った通り、ぼっちの僕には何も関係のない話ですがね。