Display Mode が Extend Desktop のときフルスクリーンの出力先を Oculus にする

画像は oculus.com より引用されています。

Oculus Rift のアプリケーションの中には Extend Desktop to the HMD でないと動かないものがありますよね。ところがフルスクリーンモードを実行するとメインディスプレイにしか出力されないし、 ウィンドウモードではきちんと映せない、ということがあります。 メインウィンドウを Oculus にして設定しても良いのですけれど、その作業は中々に面倒くさいです。

ただ実行環境が Windows で、アプリケーションが Unity 製なら、面倒な作業を避けることができます。

実行時コマンド(引数)を利用する

Unity にはいくつかの実行時コマンドが用意されていて、その中に別のスクリーンでフルスクリーンを実行するためのコマンド -adapter N があります。残念ながら Windows のみなんですが、これを利用するとフルスクリーンのターゲットを変更することができます。 (N には任意の数値が入ります。後述します。)

コマンドライン引数 - Unity マニュアル

アプリケーションは多くの場合に既にコンパイル済みでしょうから、 ショートカットを利用してコマンドを入力するのが簡単です。 他に、コマンドプロンプトから起動する、VBスクリプトを用意する、バッチファイルを用意する、 などの手段が考えられますが、それらのファイルはいつでも手に入るわけではありませんしね。 ショートカットならどこでも直ぐに作ることができます。

ショートカットを作成しコマンドを入力する

例えば OculusApp.exe というファイルがあるとき、右クリックからコンテキストメニューを開くなどして 「ショートカットの作成(S)」から LeapCSharp.dll - ショートカット を作成します。

作成したショートカットのファイルプロパティを開き、ショートカットタブから、項目「リンク先(T):」を確認します。 リンク先が …\OculusApp.exe のとき、これを …\OculusApp.exe -adapter 1 などに変更します。 .exe-adapter の間は半角スペースが必要です。

リンク先のテキストが "…\OculusApp.exe" のように、引用符で閉じられているときは、 これを …\"OculusApp.exe" -adapter 1 のように、引用符の外にコマンドを書きます。

-adapter N の N に入力する数値は、出力対象となるディスプレイの番号を指定します。 メインディスプレイが 1 枚に、拡張した Oculus の画面が 1 枚なら、 N は 1 です。

複数のディスプレイがあるとき

adapter N の数値はメインディスプレイを除くサブディスプレイの番号のようです。 次の画面設定は 2 枚のディスプレイに Oculus を繋いだ合計 3 枚の画面構成を示しています。

複数枚の画面設定環境

状況がかなり特殊で、メインが 2 番ディスプレイ、1 番と 3 番がサブディスプレイです。そして 3 番が Oculus です。 この状態で Oculus に出力するには、サブディスプレイの 2 枚目ですから、-adapter 2 となります。 N = 3 にしたとき、メインディスプレイに出力されてしまいました。

解像度などの選択画面などが表示されるとき

Unity 製のアプリでは解像度の選択画面が表示されることがありますが、 Windowed のチェックを外しておけば、 フルスクリーンのターゲットは指定したウィンドウになります。

ただし実行したタイミングではメインウィンドウに画面が表示されることがあるので注意してください。 その場合には、一度別のウィンドウをアクティブにして、再度対象のアプリケーションをアクティブにすると、 フルスクリーンの出力先が変わります。(これ以外の解決方法が分かりません。)

解像度などの選択画面