Oculusアプリが良く分からないが起動できないときの解決法

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

"良く分からないが起動できない" ことが Oculus には良くあります。 例えば次のような場合です。

  1. アプリ単体としては起動するが Oculus に転送されていない。
  2. 起動するが画面が表示されない。
  3. 起動するが変な画面が表示される。
  4. 起動するが途中でクラッシュする。

ここではこれらの問題を解決する可能性がある方法についていくつか紹介します。

この記事は 2014.11.17 現在で最新の開発環境を元に書かれています。

32bit か 64bit 向けかを確認する

用意されていなければ元も子もないですが、32bit か 64bit かを調べて適切なバージョンを利用しているか調べましょう。 64bit OS で 32bit 版を実行できない、ということはあまりありませんが、挙動が異なる場合があります。

Rift Display Mode をスイッチする

良くあるのは、Oculus の設定 Display ModeDirect HMD AccessExtend Desktop to the HMD でスイッチすることです。 これによって問題が解決する場合があります。 (Unity製の) DirectToRift.exe による実行と、通常の実行ファイルからの実行と両方を試してみてください。

DirectX9 / DirextX11 で起動させる

DirectX9 で実行する場合と DirectX11 で実行する場合と挙動が異なるようです。 Unity などのゲームエンジンから出力されるアプリケーションはこの問題を抱えているような気がします。

Mac OSX の情報は不足しています。私自身が Mac を持っていないせいもありますけども。

(Unity) 開発時に DirectX11 の利用を制御する場合

メニューバーから Edit > Project Settings > Player を開くなどして、 Inspectorビューに Playr Settings を開きます。設定項目 Other Settings にある、 Use Direct3D11 の設定を変更します。

(Unity * Win) 実行ファイルを実行するときに変更する

既にビルドされてしまっている Unity の実行ファイルについては、実行時にオプションコマンドを指定することによって 利用する DirectX のバージョンを制御することができます。 ただし Windows 向けの実行ファイルにしか用意されていないコマンドと公式には示されています。

Command line arguments - Unity Manual

実行オプションとして、-force-d3d11-force-d3d9 を指定すると、その DirectX のバージョンでゲームを実行できるようです。 しかし実行の度にいちいちコマンドラインを起動してオプションを設定するのは面倒です。

そこで実行ファイル仮にBuild.exeがあるとして、 これのショートカットBuild.exe - ショートカットを作ります。

ショートカットのプロパティを開きショートカットタブから項目リンク先を変更します。 ~Build.exe -force-d3d11 のように、リンク先の末尾に -forced3d11-forced3d9 を追加して適用します。 .exe-force の間には半角スペースが1つ必要です。

これすらも面倒であれば、きゅーこん氏が配布してくださっている VBスクリプトを利用するが良いと思います。 最適なオプションを見つけて実行してくれるようです。ただし、このスクリプトを利用するよりも前に、 起動できない原因が DirectX のバージョンにあるのかどうかを確認しておいた方が良いでしょう。

RunDemoスクリプト ― cubi9.com

なおこの方法を利用して DirextX のバージョンを変更すると次のようなエラーメッセージが表示される可能性があります。

Direct3D 11 extended mode is not supported in this configuration. Please use direct display mode, a different graphics API, or rebuild the application with newer Unity version.

ちなみに Use Direct3D11 を使ったビルドと、forced3d11 は同じ挙動用のようです。 DirectX11 でしか上手く起動できないアプリで試したところ、いずれの場合も起動しました。