セットアップ

SDKを導入し、サンプルSceneでDivingStationからのデータ受信を確認するまでの手順をご説明します。

必要環境

項目構成
UnityUnity 6.3 LTS。以下の手順では6000.3.25f1を使用
対象プラットフォームWindows、macOS 13以降、Ubuntu 22.04/24.04(Unity 6.3 LTSのエディターの動作環境)
デバイスContactGlove3 Pro
サーバーDivingStation v2.0.0以降
C# API互換性.NET Standard 2.1
SDKの依存パッケージUnity UI 2.0、Physics、IMGUI、ImageConversion。SDK導入時にUnityが導入します

SDKパッケージの導入

Unity Hubで新しいプロジェクトを作成します。以下の手順ではUniversal 3Dテンプレートを使用しています。

com.melt-interface-technologies.contactglove.sdkv2を導入します。Protocolクライアント、Unityアダプター、Basic Sampleが1つのパッケージに含まれます。次のどちらかの方法を選んでください。

Window > Package Management > Package Managerを開き、左上の+メニューから導入方法を選びます。

Package ManagerのGit URL・ディスクからの導入メニュー

Git URLから導入する

Package Managerの+からInstall package from git URLを選び、次のURLを入力します。UnityからGitとリポジトリへアクセスできる環境が必要です。

https://github.com/MeltInterfaceTechnologies/ContactGloveSDKv2Unity.git?path=/Packages/com.melt-interface-technologies.contactglove.sdkv2#main

コンパイルが終わったら、ContactGlove SDK v2 > Samples > Basic SampleでImportを押してください。URLの#mainはmainの最新コミットを参照します。同じ版を使い続ける場合は、導入するコミットSHAまたは公開済みタグに置き換えます。Gitからの導入とリビジョン指定も参照できます。

ContactGlove SDK v2のSamplesタブとBasic SampleのImportボタン

ローカルのチェックアウトから導入する

  1. ContactGloveSDKv2Unityを取得します。
  2. Unityプロジェクトを開き、Window > Package Management > Package Managerを選択します。
  3. Package Manager左上の+からInstall package from diskを選択します。
  4. 取得したリポジトリ内のPackages/com.melt-interface-technologies.contactglove.sdkv2/package.jsonを選択し、パッケージの解決とコンパイルが終わるまで待ちます。
  5. パッケージ一覧でContactGlove SDK v2を選択します。SamplesタブのBasic SampleでImportを押します。

Unityプロジェクトが参照している間は、取得したリポジトリを同じ場所に保ってください。ディスクからの導入はUnityマニュアルでも確認できます。

DivingStationの準備

  1. グローブを接続するPCでDivingStationを起動します。
  2. ContactGlove3 Proを接続・有効化し、DivingStationの案内に従って機器の設定、キャリブレーション、Retarget profileの設定を行います。
  3. DivingStation上でグローブが動作していることを確認します。
  4. 最初はUnityも同じPCで実行(接続先 127.0.0.1)すると接続設定が簡単です。

信頼できるLANから接続する

  1. 信頼できるLANを使用してください。
  2. DivingStationのSDK / Protocolで待受範囲をLAN に公開にします。待受範囲を変更した場合は、DivingStationを再起動してください。
  3. Unity側のIpAddressにはDivingStationを実行しているPCの数値IPアドレス、ServerPortにはその待受ポート(既定25791)を指定します。SDKから接続するアプリケーションでもBasic Sampleでも同じ設定を使います。
  4. 接続承認が必要な設定では、DivingStationに表示される接続要求を許可してください。
  5. 両方のPCの実際の受信ポートで、必要なUDP通信を許可してください。SDK側はReceivePortを使用します。0で自動割り当てする場合は、実行中の診断表示で実際のポートを確認してください。

公開範囲と接続承認はDivingStationで管理します。Protocolのセッションは暗号化や暗号学的認証を提供しないため、信頼できるLANで使用してください。

サンプルを開いて設定する

Assets/SamplesにImportされたサンプル(例:Assets/Samples/ContactGlove SDK v2/0.1.0/Basic Sample/)からBasicSample.unityを開きます。Import先フォルダーはパッケージ名とバージョンに応じて変わる場合があります。URPのプロジェクトでは、開いた直後にSceneへ未保存の印が付きます。URPがライトに設定を追加するためで、保存しても問題ありません。

Projectウィンドウ内のBasic SampleフォルダーとBasicSampleシーン

シーン内のContactGloveBehaviourゲームオブジェクトを選択します。Hosts配列に接続情報があります。

ContactGloveBehaviourのInspectorでHostsの接続設定を開いた状態

フィールド既定値意味
HostIdlocalhostアプリケーション内でサーバーセッションを識別するキー
DisplayNameDivingStationホストの表示用名称
IpAddress127.0.0.1DivingStationを実行するコンピューターの数値IPアドレス
ServerPort25791DivingStationがコマンドを受信するUDPポート
ReceivePort25788SDK側のUDPデータ受信ポート。0はOSによる自動割り当て
SendPort0SDK側のUDP送信元ポート。0はOSによる自動割り当て

表に示す値はHostOptionsの既定値です。シーンに保存されている値や、プロジェクトで変更した値が優先されます。HostIdを変更する場合は、HowToUseゲームオブジェクトにあるHowToUse.HostIdも同じホストIDにしてください。同じコンピューターで複数クライアントを実行する場合は、使用ポートが競合しないように設定します。ReceivePort=0やSendPort=0の場合、実際の割り当てポートは実行中の診断表示で確認できます。

GameビューはFree Aspectなどの横長の比率にしてください。縦長の比率ではUIが小さく表示されます。

Playを押します。SDKが自動的にDivingStationに接続し、有効なレコードを受信すると診断表示がReceivingになります。DivingStationでは、右上の歯車から設定 > SDK / Protocolを開き、SDK / DivingStationProtocol v2のSDK の状態が接続中になっていることを確認できます。使用方法に従って現在値を確認してください。

左手の関節角度と骨格データを受信しているBasic Sampleの実行画面

VR連携:OpenXRとXR Hands

ContactGlove3 Proは、SteamVRに接続してVR用の手の形状を送信できます。本節では、SteamVRが受け取っている手の形状や、割り当てられたポジショントラッカーの位置を取得してUnity内で可視化する方法をご紹介します。

サンプルとして、Unity公式のHandVisualizerシーンを使用します。SDKのBasic Sampleとは別になりますのでご注意ください。

Windows向けのパッケージ構成

以下は手順で使用するバージョンです。

項目バージョン
Unity6000.3.25f1
OpenXR Plugin (com.unity.xr.openxr)1.17.1
XR Hands (com.unity.xr.hands)1.8.1
Input System (com.unity.inputsystem)1.20.0

公式VR Templateを使用する

Unity Hubのプロジェクト作成画面で「VR」を選択します(ダウンロードしていない場合「Download Template」ボタンでダウンロードしてください)。プロジェクト名と保存場所を設定してプロジェクトを作成します。

Unity HubでVR Templateを選択したプロジェクト作成画面

下の自動起動の設定を確認してください。

Package ManagerでXR Handsを選択し、SamplesタブのHandVisualizerでImportを押します。すでにImportされている場合は、Assets/Samples/XR Hands/1.8.1/HandVisualizer/HandVisualizer.unityを開きます。Import先フォルダーはパッケージ名とバージョンに応じて変わる場合があります。実行するへ進んでください。

手動で設定する

Windows向けのプロジェクトを用意します。Render pipelineはUniversal Render Pipeline (URP)の利用を推奨します。Package Managerの+ > Install package by nameを開き、上表のパッケージIDをNameに、バージョンをVersionに入力してInstallを押します。OpenXR Plugin、XR Hands、Input Systemの3つについて繰り返してください。

次の自動起動・描画・入力の設定を確認したあと、Package ManagerのXR Hands > Samples > HandVisualizerでImportを押し、Assets/Samplesに導入されるHandVisualizer.unityを開きます。

自動起動の設定

Edit > Project Settings > XR Plug-in Managementで設定します。本手順では、PlayやPlayer起動時にXRと手の追跡を自動で開始します。

設定値
OpenXR loaderON
Initialize XR on StartupON
Hand Tracking SubsystemON
Auto Start SubsystemON

OpenXRとInitialize XR on StartupをONにします。続いてXR Plug-in Management > OpenXRのFeature一覧でHand Tracking SubsystemをONにし、右側の歯車からAuto Start SubsystemをONにします。

自分のアプリケーションで起動処理を実装する場合は、XRの初期化や手の追跡の開始を手動で制御することもできます。

実行する

Window > XR > OpenXR > Project Validationのエラーを確認し、選択したruntimeと機器に合う設定にします。コントローラー入力を利用する場合は、対応するInteraction Profileと入力のbindingも設定してください。

SteamVRをOpenXR runtimeとして設定しておいてください。DivingStation、ContactGlove3 Pro、ヘッドマウントディスプレイ(HMD)、ポジショントラッカーを準備し、SteamVRで正常にトラッキングされている状態にしてください。手の関節データを取得するには、runtimeがXR_EXT_hand_trackingを通じて手のデータを提供している必要があります。

HandVisualizerシーンでPlayを押し、VR映像内で左右の手の形状・向き・動きを確認します。表示されない場合は、トラブルシューティングをご覧ください。

HandVisualizerで左右の手と関節を表示したUnityのGameビュー