Immersiveヘッドセット向けアプリ開発者のみなさん、こんにちは。XVIの吉高(@TyounanMOTI)です。
AcerのWindows Mixed Reality Development Editionが届いた方も多いでしょう。
今回の記事では、Immersiveヘッドセット向けアプリをUnityで開発するときに陥りやすい落とし穴をご紹介します。
この記事の情報は Unity 2017.2.0f1, Windows 10 Build 16299.0で検証したものです。
今後の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ヘッドセットはセットアップがカンタンで、コストパフォーマンスも良好。これまでより広く普及することが期待できます。
盛り上げていきましょう!