はじめに
Vive Foucus Vision & VIVE XR Elite対応のMRアプリ開発について説明します。
今回はXR Interaction Toolkitからセットアップし、続けてVIVE Focus Vision向けにセットアップします。
PICO4/4U版はこちら。
開発環境
- Unity 6000.0.48f1
- Vive Open XR Plugin v2.5.1
- OpenXR 1.4.1
- XR Interaction Toolkit 3.2.0
Unityプロジェクトの作成
Universal 3Dテンプレートでプロジェクトを作成してください。
XR Interaction Toolkitをインストールする
Pacakge Manager > 左メニュー3段目のUnity Registry を選択し、検索欄でXR Interaction Toolkitと入力します。
最新バージョンをインストールしたいので、Version HistoryからOther version を選択。LatestをInstallします。現時点では3.2.0が最新です。
続いて、Samplesタブから Hands Interaction Demoをインポートします。
エラーが出るのでProject VaridationでFix All してください。
1回では終わらない場合は何度か試してください。一度UnityEditorからフォーカスを外して戻すと処理されて解消する事もあります。
Samples > XR Interaction Toolkit > 3.2.0 > Hands Interaction Demo > Hands Interaction Demoシーンを開きます。
XR Origin (XR Rig)のXR Origin > Trackign Origin ModeをFloorに設定します。
シミュレーターで動作確認する
デバイスのセットアップはまだなので、シミュレーターで動作確認しましょう。
Project Settings > XR Plug-in Management > XR Interaction Toolkitを開き、Use XR Interaction Simulator in scenesにチェックを入れてください。アセットのインポートを促されるのでOKボタンを押してインポートします。
Playボタンを押すと、XRデバイスでの動作がキーボードでシミュレート出来るようになります。
Vive Open XR Pluginをインストールする
Vive Open XR Pluginのインストール方法はいくつかありますが、ここではOpen UPMを使ったインストール方法を紹介します。
-
OpenUPM CLIをインストール(初回のみ)
npm install -g openupm-cli
-
Unity Projectのディレクトリに移動
cd YOUR_UNITY_PROJECT_DIR
-
-f
オプションをつけてVive Open XR Pluginをインストール
openupm add -f com.htc.upm.vive.openxr
公式ドキュメントのインストール方法
htc公式ドキュメントではUnitypackageのtgzファイルをgithubからダウンロードしてインポートする方法が紹介されています。Projectをセットアップする
公式ドキュメントのGetting Startに従ってセットアップします。
Build ProfilesでAndroidにSwitch Platform
Project Settings-> Player-> Resolution and Presentation-> Orientation Default Orientation を Landscape Leftにセット
2025/07/21追記 Graphics APIはVulkanを削除しなくても動作することを確認
Graphics APIからVulkanを削除し、OpenGLES3のみにする Project Settings-> XR Plug-in Management enable OpenXR and VIVE XR Support feature group.
ビルドしてVive Focus Vision実機で動作確認
ここでビルドすると、 Unsupported Input Handringのポップアップが表示される場合があります。
これは、新旧Input System両方利用する設定になっている場合にパフォーマンスが低下する事を警告してます。
ここでは新Input Systemを使いたいので、Noを選択して戻り、Project Settings > Player > Othersの Active Input HandringをBothからInput System Package(New)を選択します。
選択するとプロジェクトの再起動を求められますので Apply ボタンで再起動します。
いよいよビルドです。
PlatformがAndroidになっていない場合はSwitch PaltformでAndroidにしてください。
Build & Runボタンを押せば、Hand Interaction DemoシーンがVRで体験できます。
Hand Trackingを有効にする
Vive Hand Trackingを有効にする
注意:Hand Tracking SubSystemでは挙動がおかしくなります。Vive Hand Trackingの方を有効にしてください。
公式ドキュメント
https://developer.vive.com/resources/openxr/unity/tutorials/hand-tracking/hand-tracking-joint-pose/
パススルーを有効にする
Vive Foucus Visionといえばカラーパススルー。パススルーを有効にしてMRにしましょう。
Main Cameraの設定
Environment > Background TypeをSkyboxからSolid Colorに変更
BackgroundのColorを0x00000000に変更
XR Plug-in Management > Open XRからVIVE XR Composition LayerとVIVE XR Passthroughを有効にする
Graphics >2025/07/21追記 Advanced Properties は設定不要な事を確認
### Preferences > Graphics > Properties > Advanced PropertiesをAll Visibleにする HDR設定を変更する
Project Settings > Quality > MobileのRender Pipeline Assetを選択。
QualityのHDRをオフにする
QualityのHDRはONのまま、HDR Percisionを64bitに変更する
PassthroughAPIでパススルーを有効にする
以下のスクリプトをPassthroughSetter.csとしてプロジェクトに追加し、HierarchyにPassthroughSetter GameObjectを追加してセットしてください。
using UnityEngine;
using VIVE.OpenXR.CompositionLayer;
using VIVE.OpenXR.Passthrough;
public class PassthroughSetter : MonoBehaviour
{
private VIVE.OpenXR.Passthrough.XrPassthroughHTC activePassthroughID = 0;
private LayerType currentActiveLayerType = LayerType.Underlay;
private void Start()
{
StartPassthrough();
SetPassthroughToUnderlay();
}
private void StartPassthrough()
{
PassthroughAPI.CreatePlanarPassthrough(out activePassthroughID, currentActiveLayerType, OnDestroyPassthroughFeatureSession);
}
private void OnDestroyPassthroughFeatureSession(VIVE.OpenXR.Passthrough.XrPassthroughHTC passthroughID)
{
PassthroughAPI.DestroyPassthrough(passthroughID);
activePassthroughID = 0;
}
private void SetPassthroughToUnderlay()
{
if (activePassthroughID == 0){ return;}
PassthroughAPI.SetPassthroughLayerType(activePassthroughID, LayerType.Underlay);
currentActiveLayerType = LayerType.Underlay;
}
}
設定は以上です。
ビルドして実機で動作確認してください。
パススルーで現実に重なってオブジェクトが表示されていれば成功です。
公式ドキュメント
https://developer.vive.com/resources/openxr/unity/tutorials/passthrough/
公式ドキュメントではVIVE XR Composition Layer(Passthrough)を使う形で説明されていますが、v2.5.1ではDeprecatedになっており、VIVE XR Passthroughに置き換わっているようです。
おわりに
お疲れ様でした。
OpenXR + XR Interaction Toolkitにより、デバイス間の違いは吸収され、同じ作り方でコンテンツを開発出来るようになります。
とはいえ、各デバイス向けのセットアップは今回説明した事だけでもPICO4とVIVE Foucs Visionで微妙な差異がある事が分かります。
XRデバイスの環境構築は詰まることも多いので、積極的に知見を共有していきたいと思います。
今回解説したセットアップ済みUnity ProjectはGitHubで公開しますので、自由にご利用ください。
https://github.com/afjk/VIVE-MR-Unity-Template
※ サンプルのHands Interaction Demoのインポートとセットアップは記事に沿ってご自身で設定してください。
XRアプリ開発に少しでもお役に立てれば幸いです。
参考
- htc公式ドキュメント