Unity を検索

Unity 2018.3 のマルチプラットフォーム VR 機能

2018年11月22日 カテゴリ: テクノロジー | 4 分 で読めます
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

できる限り多くの VR プラットフォームをターゲットにできれば、アプリケーションを幅広いオーディエンスに届けることができます。この記事で説明する Unity 2018.3 の機能を利用すると、プラットフォームに合わせて苦労してビルドする必要なしに、さまざまなデスクトップ VR デバイスやモバイル VR デバイスで動作するスリムで優れたアプリを開発できます。ぜひ最後まで読み、これらの機能を実際に活用しているオープンソースプロジェクトへのリンクを参照してください。

注:この記事の内容は、OpenVR、Oculus、WindowsMR、Daydream、GearVR の SDK に当てはまります。PSVR には当てはまりません。

ビルドターゲットのプラットフォームと VR 用 SDK の選択

まず、基本を確認しておきましょう。

アプリケーションを動作させるデバイスの種類によっては、ビルドターゲットのプラットフォームを変更し、複数回コンパイルしなければならない場合があります。たとえば、Oculus Rift をターゲットとしている場合は、ビルドターゲットのプラットフォームを「PC, Mac, & Linux Standalone」にします。Oculus Go をターゲットとしている場合は、「Android」にします。Oculus Rift と Oculus Go の両方をターゲットにする場合は、ターゲットプラットフォームごとにビルドする必要があります。

ビルドターゲットのプラットフォームの変更については、Unity ドキュメンテーションのビルド設定のページで説明しています。

それぞれのビルドターゲットのプラットフォームについて、適切なバーチャルリアリティ向け SDK をターゲットにする必要があります。1 つの exe で複数の SDK をターゲットにできることもありますが、SDK ごとに別々にビルドする必要がある場合もあります。「PC, Mac, & Linux Standalone」をターゲットにする場合は、Oculus と OpenVR の両方のバーチャルリアリティ向け SDK をターゲットとしてビルドできます。「Android」をターゲットにする場合は、Daydream と Oculus のバーチャルリアリティ向け SDK にあわせて別々にビルドする必要があります。

ターゲットとする各デバイスについて、ビルドターゲットのプラットフォームと VR SDK を適切に選択できるよう、ご自分で必ず試してみてください。

VR の有効化とビルドに合わせた SDK の選択については、Unity ドキュメンテーションの VR 概要のページで説明しています。

Tracked Pose Driver

Tracked Pose Driver は、VR デバイスに従ってトランスフォームの位置と回転を変える優れたコンポーネントです。

これは Tracked Pose Driver を使用した XR リグのスクリーンショットです。XR リグの「Main Camera」、「Left Hand」、「Right Hand」ゲームオブジェクトには、それぞれ TrackedPoseDriver コンポーネントが付けられています。このコンポーネントは、選択したデバイスとポーズのソースの組み合わせに基づき、ゲームオブジェクトのトランスフォームを変更します。VR Lightweight RP テンプレートを使って新しいプロジェクトを作成すると、この XR リグを実際に確認できます。

InputManager

VR 用以外のコントローラーから入力を取得するのと同じ方法で VR コントローラーから入力を取得できることはもうご存知でしょうか?嘘ではありません。ドキュメンテーションの XR 入力のページにある入力対応表を使えば、トリガー、サムスティック、グリップボタンなどの入力を参照できます。

たとえば、左トリガーの Input Manager は次のように設定します。

また、左手側のプライマリーボタンの Input Manager は次のように設定します。

XRNodes

特定のデバイスについて理解を深める必要がある場合は、InputTracking クラスに便利なツールがいくつかあります。

InputTracking.GetNodeStates() を使うと、XRNodeStates というオブジェクトのリストを取得できます。XRNode 型には、Head、LeftHand、RightHand、TrackingReference(たとえば、Oculus Rift のカメラや Vive Lighthouse)など、ノードの抽象的表現が定義されています。XRNodeStates は、ノードの位置や回転など、物理的情報を提供するものです。さらに、ノードのタイプ、ノードが現在トラッキングされているかどうか、uniqueID もわかります。

InputTracking では、ノードが追加または削除されたときや、ノードのトラッキングが失われたときや始まったときに始動するイベントも使用できます。

SDK 固有の詳細設定を有効にする

ユーザー体験の種類によっては、SDK 固有の詳細設定を行わなければならない場合があります。しかし、ご安心ください。私たちがついています。

XRSettings は、構築済みのアプリケーションでどの VR SDK をサポートするか、どの VR SDK がアクティブかなど、XR 関連のグローバル設定を提供します。XRSettings.supportedDevices を呼び出すと、ビルド時に選択された VR SDK のリストが返されます。XRSettings.loadedDeviceName を使うと、現在どの SDK が入力に使われているかがわかります。この設定を使い、ユーザーアクションを駆動する各種の入力の選択など、プラットフォーム固有の設定を有効にすることができます。

private static float m_FireTriggerThreshold = 0.75f;

   public static bool FireControlActive(Handedness hand)
   {
       if (XRSettings.loadedDeviceName == "daydream")
       {
           if (hand == Handedness.LEFT)
               return Input.GetButton("VR_PrimaryButton_Left");
           else // right hand
               return Input.GetButton("VR_PrimaryButton_Right");
       }
       else
       {
           if (hand == Handedness.LEFT)
               return Input.GetAxis("VR_TriggerAxis_Left") > m_FireTriggerThreshold;
           else // right hand
               return Input.GetAxis("VR_TriggerAxis_Right") > m_FireTriggerThreshold;
       }
   }

 

XRSettings を XRNodes と併用することで、あらゆる VR SDK とそれに対応する各デバイスの UX を通した操作をコントロールできます。

リソース

この記事で取り上げた機能を試してみたくなりましたか?まずは次の 2 つのプロジェクトをチェックしてください。

Onslaught は GitHub 上にある 400 KB 未満のプロジェクトです。OpenVR、Oculus Desktop、Windows Mixed Reality 没入型ヘッドセット、Oculus Mobile(GearVR、Go)、Daydream をサポートしています。Unity Editor 2018.3.0b3 以降をお使いであれば、今すぐお試しいただけます。

XR Input Tests はマルチプラットフォームのテストプロジェクトです。Unity の XR 関連の QA では、毎日このプロジェクトを使用してこの記事で紹介した機能を含めたさまざまな機能の検証をしています。

2018年11月22日 カテゴリ: テクノロジー | 4 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック