「Windows MR デバイス向けアプリ開発セミナー」 資料公開

2017/10/02, 06に開催されました、「Windows MR デバイス向けアプリ開発セミナー」の資料を公開いたします。
Oculus RiftからWindows Mixed Reality Immersiveデバイス向けに、Unityを使ってアプリを移植する際の落とし穴事例集をご紹介しました。
Motion ControllerをUnityで使用する際の注意点も記載しました。
Immersiveヘッドセット向けにアプリ開発をする際のご参考になれば幸いです。

SHARE

FACEBOOK

TWITTER

Immersiveヘッドセット向けアプリ開発落とし穴集 (Unity 2017.2.0f1)

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ヘッドセットはセットアップがカンタンで、コストパフォーマンスも良好。これまでより広く普及することが期待できます。
盛り上げていきましょう!

SHARE

FACEBOOK

TWITTER

はじめまして。

こんにちは、XVIの吉高(@TyounanMOTI)と申します。
社長の@GOROmanから、いつもどおり無茶振りをくらったのでブログ記事を書いてみます。
不定期ではありますが、XVIで培った技術情報とかいろいろ書いていく予定です。
他の社員も書いてくれると思います。たぶん。

どうぞよろしくお願いいたします。




SHARE

FACEBOOK

TWITTER