Immersiveヘッドセット向けアプリ開発者のみなさん、こんにちは。XVIの吉高(@TyounanMOTI)です。

AcerのWindows Mixed Reality Development Editionが届いた方も多いでしょう。
今回の記事では、Immersiveヘッドセット向けアプリをUnityで開発するときに陥りやすい落とし穴をご紹介します。

この記事の情報は Unity 2017.2.0b10, Windows 10 Build 16281.1000で検証したものです。
今後のUnityやWindowsのアップデートで解消される可能性があります。

Windows 10 Creators Updateでエディタ実行できない

2017.2.0b9から、Creators UpdateのWindows10では、エディタ実行時に以下のようなメッセージが出力され、真っ暗な画面が描画されます。
Windows Mixed Reality is not supported on operating systems prior to Windows 10 Fall Creators Update
Fall Creators Update以前のWindowsではUnityでImmersiveヘッドセットの開発はできないようです。
Insider Previewビルドを受け取ることでエディタ実行が可能になります。
2017.2.0b8ではこの制約はありませんでした。

カメラのNearClipを0.1より近くできない

CameraコンポーネントのインスペクタにあるNearClipの設定を、0.1より近くできないようです。

このコードのようなコンポーネントをMain Cameraゲームオブジェクトにつけることで一応は回避できます。
(この回避方法では問題があるかもしれませんので、申し訳ありませんが自己責任でお願いいたします)

ちなみにField Of Viewの既定値は以下のようになっていました。
・5.6.2f1: 100.6746
・2017.2.0b8: 100.6689
・2017.2.0b10: 102.0456
単純なシーンだとちょっと見た目には判別つかないですが、一応インスペクタで変更できるようにしてあります。
また、既定のアスペクト比が1.0でなくおかしな値になっていたので、アスペクト比は定数にしてあります。

DirectXでのImmersiveヘッドセット向け開発ではProjection Matrixをシステム側からAPIで取ってくる仕組みなので、アプリ側で指定すると何か不都合が発生する可能性があります。
一応、IPDの調整は、上記の回避方法でもWindowsの設定から変更が効くようです。

原点(0,0,0)は床の表面にある

原点はシーンロード時のヘッドセット位置から鉛直に下ろした線と床の交点です。
(Unity 5.6.2f1ではHoloLens/Immersiveヘッドセットともに「原点はヘッドセットの位置」でした)

これはOculus Riftの既定値である「原点はヘッドセットの位置」とは異なる仕様です。
Viveの既定値である「原点はRoomの中心」と似ています。

ちなみに、ImmersiveヘッドセットではUnityEngine.XR.XRDevice.SetTrackingSpaceType関数で TrackingSpaceType.Stationaryを設定しようとするとfalseが帰ってきて失敗します。
既定の値はTrackingSpaceType.RoomScaleで、そこから変更することはできません。

検証中に、TrackingSpaceType.RoomScaleが返ってくるにもかかわらず、原点がヘッドセットの位置になるときがありました。
Mixed RealityポータルとUnityを再起動すると上述の状態に戻ったので、まだ不安定なのかもしれません…。

UnityEngine.XR.InputTracking.Recenter関数でポジションリセットできない

Recenter関数が動作しません。
ユーザー操作でポジションリセットするには、シーンをリロードするしかなさそうです。

RenderScaleを変えると正常に描画されない

UnityEngine.XR.XRSettings.eyeTextureResolutionScaleによるRenderScale変更が正常に動作しません。
今後のアップデートに期待します。

Build And Runで起動に失敗するようになることがある

ふとしたことでBuild And Runに失敗するようになることがあります。
Assets/ と ProjectSettings/ フォルダ以外を削除してUnityを起動し直すと直ることがあります。

Debug構成で実行すると起動時にクラッシュ

Debug構成ではVisual Studioからのデバック実行に失敗します。
バックエンド(.NET, IL2CPP)やDevelopment Build、Unity C# Projectsのチェックの組み合わせを試しましたが、すべてだめでした。
ReleaseやMaster構成ではデバック実行が可能です。

おわりに

まだ開発者版ということでいろいろと落とし穴がありますが、製品版が楽しみです。
Immersiveヘッドセットはセットアップがカンタンで、コストパフォーマンスも良好。これまでより広く普及することが期待できます。
盛り上げていきましょう!