PC向けの話。Unityで作ったゲームのウインドを異なるモニターに移動させる方法。Youtube動画で紹介したRusty’s Retirementというゲームで使われていたような技術です。
目次
出来ること
PC限定の話になります。作ったアプリを別のモニターに移動させる方法になります。今回はモニター番号の順番でループするものを作成します。
概要
作ったゲームのウインドを、ゲーム内の機能として異なるモニターへ移動させたいとします。
- モニターが2つ以上ある
- スペースキーでモニターの番号順にループする
- 起動時に配置されているモニターの場所からループする
- 必ず最初のスペースキーで2番目のモニターに移動ではなく、起動時に2番目のモニターにいたらそこを基準に移動する
使う技術
以下のようなメソッドやプロパティを利用して、今回のミッションを攻略します
メソッド・プロパティ | 役割など |
---|---|
Screen.GetDisplayLayout | お使いのPCのモニター情報を取得します |
Screen.mainWindowDisplayInfo | メインのウインドの情報。 すべてのモニターから一致しているモニターを取得するのに利用 |
Screen.MoveMainWindowTo | ディスプレイの移動。 DisplayInfoと座標を指定することで移動 |
Screen.mainWindowPosition | アプリのウインドの位置 |
試せてないこと
移動先のモニターの大きさが異なる場合、画面からはみ出す可能性あります。そういった場合は戻す処理などを別途実装してください。
フェアリー
よくあるやつだと、一定時間以内に確定ボタンが押せないと元の場所に戻るやつとかですね
実装編
今回はアプリをビルドしないと試せないものなので、Unityエディタではなくビルドしてアプリ側で試すようにしてください!
スクリプトの方針
処理としては次のような流れで実装します。
- スタートメソッド・開始時に色々初期化
- PCのモニターの情報を取得
- 現在、何番目のモニターに位置しているかを調べる
- スペースキーを押されたら次のモニターのインデックスへ移動
- アプリの座標は移動前の座標と同じものを利用する
- 右下の方で遊んでたら、別のモニターに移動しても移動先のモニターの右下の方にウインドが配置される
スクリプト
ファイル名:MonitorChanger
using System.Collections.Generic;
using UnityEngine;
public class MonitorChanger : MonoBehaviour
{
public int displayIndex = 0;
public List<DisplayInfo> displayInfoList;
private void Start()
{
displayInfoList = new List<DisplayInfo>();
Screen.GetDisplayLayout(displayInfoList);
// 現在のディスプレイのインデックスを調べる
for (int i = 0; i < displayInfoList.Count; i++)
{
if (Screen.mainWindowDisplayInfo.Equals(displayInfoList[i]))
{
displayIndex = i;
break;
}
}
}
void Update()
{
// スペースキーを押したら、別のディスプレイにゲーム画面を移動する
if (Input.GetKeyDown(KeyCode.Space))
{
displayIndex++;
displayIndex %= displayInfoList.Count;
Screen.MoveMainWindowTo(displayInfoList[displayIndex], Screen.mainWindowPosition);
}
}
}
動かして確認
あとは実際に動かして見てください。再度の確認になりますが、こちらはアプリをビルドして確認が必要になります。
- Build Settingsに含まれるシーンを選択
- スクリプトをアタッチする
- 空のGameObjectを作成、スクリプトをアタッチ
- アプリをビルド
- フルスクリーンでも良いですが、閉じるの大変なのでWindowedにしておくのおすすめです
- 私の方ではWindowsでしか試してません!
- ゲームを起動したらスペースキーを連打してウインドが移動するのを確認してください
ムービーは撮れませんでした。
コメント