カスタムハンドモデルを使用する
更新日時: 2025/11/06
このチュートリアルでは、デフォルトのInteraction SDKハンドを独自のカスタムハンドのセットに置き換える方法を学習します。カスタムハンドモデルを追加する方法は2つあります。合成手の追加メッシュの親を設定すること(オプションA)も、合成手の関節をカスタムメッシュにリターゲティングすること(オプションB)もできます。
可能な場合、オプションBよりもシンプルで迅速なオプションAを使ってください。
HandJointコンポーネントの関節位置データを使用して、デフォルトの手の追加メッシュの親を設定する方法です。さらにカスタマイズするために手を再テクスチャーすることもできます。このセクションでは、指輪メッシュの親を指に設定します。
[Project (プロジェクト)]ウィンドウの検索バーで、ButtonRingを検索し、[Hierarchy (階層)]にドラッグします。デフォルトの設定では自分のアセットしか検索されないため、検索フィルターが[All (すべて)]か[In Packages (パッケージ内)]のどちらかに設定されていることを確認してください。
シーンに指輪オブジェクトが表示されます。
[Hierarchy (階層)]の下で、追加したButtonRingを選択します。
[Inspector (インスペクター)]で、[Add Component (コンポーネントの追加)]ボタンをクリックしてHand Jointを検索し、Hand Joint (手の関節)コンポーネントを追加します。
Hand Joint (手の関節)コンポーネントから、[Hand (手)]をLeftHandまたはLeptHandSynthetic GameObject (いずれか使用する方)に設定します。
[Hand Joint Id (手の関節ID)]を[Hand Index 2 (人差し指2)]に設定します。これは指輪がトラッキングする関節です。
[Project (プロジェクト)]ウィンドウの検索バーでGoldMatを検索し、GoldMatマテリアルを[Inspector (インスペクター)]のButtonRingにドラッグします。
[File (ファイル)] > [Build And Run (ビルドして実行)]の順に選択するか、Linkが接続されている場合は[Play (プレイ)]をクリックします。
現在のシーンが読み込まれると、指輪が人差し指に付いて見えます。人差し指の関節と連動して動くようになります。
オプションB: カスタムメッシュへのリターゲティング
このアプローチでは、デフォルトの手をカスタムメッシュに完全に置き換えます。この方法はカスタマイズの程度が最も大きいですが、既存のハンドメッシュに対してメッシュの親を設定するよりも多くの時間がかかる場合があります。また、リギングと3Dモデリングに関する基本的な理解も必要です。カスタムメッシュをリターゲティングするには、既存のハンドメッシュを削除する必要がありますが、アーマチュアは残します。その後、アーマチュアにカスタムメッシュをウェイトペイントし、最後にUnityにカスタムメッシュをインポートします。
カスタムメッシュをSDKのアーマチュアにバインドする前に、Unityからハンドファイルをエクスポートする必要があります。
[Project (プロジェクト)]ウィンドウの検索バーで、OculusHand_Lを検索します。デフォルトの設定では自分のアセットしか検索されないため、検索フィルターが[All (すべて)]か[In Packages (パッケージ内)]のどちらかに設定されていることを確認してください。
検索結果で、ファイルを右クリックして、[Show in Explorer (エクスプローラーで表示)]を選択します。
Windowsファイルエクスプローラーが開き、ファイルの場所が表示されます。
ファイルエクスプローラーでファイルのコピーを作成し、元のファイルのバックアップを作成します。
コンピューターにコピーを保存します。元のフォルダーに残しておく必要はありません。
BlenderやMayaなど、任意の3DモデリングソフトウェアでOculusHand_L.fbxのコピーを開きます。
カスタムメッシュを物理的な手と同期して動かすには、アーマチュアをデフォルトの手から新しいメッシュにリターゲティングする必要があります。
3DモデリングソフトウェアでOculusHand_L.fbxのコピーを開き、カスタムメッシュをインポートして、両方が同じファイル内にあるようにします。
手のサイズと大体一致するようにカスタムメッシュをスケールします。
カスタムメッシュにスケールを適用しないでください。スケールは手のスケールと一致する必要があります。Blenderでは、手のスケールはX、Y、Z軸で0.010です。スケールを適用すると、カスタムメッシュをUnityにインポートするときにアニメーションの問題が発生する可能性があります。
カスタムメッシュをアーマチュアに合わせます。これにより、特に自動ウェイトペイントを使用する場合に、ウェイトペイントが簡単になります。
アーマチュアに合ったカスタムメッシュ
既存の手メッシュを削除し、アーマチュアだけが残るようにします。
メッシュをウェイトペイントして、手の骨格と連動するようにします。
次のステップでは、X軸を前軸としてFBXファイルをエクスポートし、リーフボーンは追加しないでください。
メッシュの名前(アーマチュアの名前ではありません)をl_handMeshNodeに変更します。これにより、Unityにメッシュをインポートした後、メッシュを見つけやすくなります。
メッシュとアーマチュアをFBXファイルとして一緒にエクスポートします。エクスポートするときは、X軸を前軸として設定し、リーフボーンは追加しないでください。
新しいメッシュがアーマチュアにバインドされたら、Unityにインポートする準備が整います。
Unityでカスタムハンドを使用したいシーンを開きます。
カスタムハンドをインポートするには、画面上部のツールバーで[Asset (アセット)] > [Import New Asset (新規アセットをインポート)]を選択します。このオプションがグレー表示されている場合、[Project (プロジェクト)]ウィンドウで[Package (パッケージ)]フォルダーが選択されていることを意味します。その場合は、[Project (プロジェクト)]ウィンドウで[Assets (アセット)]フォルダーをクリックして、もう一度試してください。
ファイルブラウザーが表示されます。
カスタムメッシュファイルを見つけ、[Import (インポート)]をクリックします。
[Project (プロジェクト)]の[Assets (アセット)]フォルダーにカスタムハンドが表示されます。
HandVisualコンポーネントは手の見え方を制御するため、カスタムメッシュを使用するにはこれを更新する必要があります。
カスタムハンドを[Assets (アセット)フォルダーから[Hierachy (階層)]のOVRLeftHandVisualにドラッグします。SyntheticHandを使用している場合、OVRLeftHandVisualはLeftHandSynthetic GameObjectの下、それ以外の場合はHandVisualsLeft GameObjectの下にあります。
カスタムハンドをOVRLeftHandVisualに置く
[Project (プロジェクト)]ウィンドウで、OculusHand_LAvatarを検索します。デフォルトの設定では自分のアセットしか検索されないため、検索フィルターが[All (すべて)]か[In Packages (パッケージ内)]のどちらかに設定されていることを確認してください。
[Hierachy (階層)]から、カスタムハンドを選択します。
[Inspector (インスペクター)]の下で、[Animator (アニメーター)]コンポーネントを追加します。
[Animator (アニメーター)]コンポーネントの[Avatar (アバター)]フィールドを、[Project (プロジェクト)]ウィンドウの検索結果からOculusHand_LAvatarファイルに設定し、そのファイルを[Avatar (アバター)]フィールドにドラッグします。
[Hierarchy (階層)]で、カスタムハンドGameObjectの子であるl_handMeshNodeを選択します。l_handMeshNodeという名前のGameObjectが表示されない場合は、3Dモデリングファイル内のメッシュ名を確認し、Unity階層でその名前を検索します。
[Inspector (インスペクター)]の下に、Material Property Block Editorコンポーネントを追加します。
Material Property Block Editorコンポーネントでは、Element 0がGameObjectのSkinned Mesh Rendererコンポーネントに設定されていることを確認してください。
Element 0はSkinned Mesh Rendererコンポーネントに設定されます。
[Hierarchy (階層)]から、OVRLeftHandVisualを選択します。
[Inspector (インスペクター)]のHand Visualコンポーネントで、Skinned Mesh Rendererをl_handMeshNodeに設定します。これにより、SDKはカスタムメッシュをハンドメッシュとして使用するように指示されます。
Hand Material Property Block Editorをl_handMeshNodeに設定します。
[Auto Map Joints (関節の自動マップ)]ボタンをクリックします。これにより、手のトラッキング中に、カスタムメッシュ内の各骨格と対応する骨格の位置が合うようになります。
関節のリストは自動的に更新されます。名前が...Tipで終わる関節は空になりますが、問題ありません。

Hand Visualコンポーネントの更新
Hand Confidence Visualコンポーネントで、Hand Material Property Block Editorをl_handMeshNodeに設定します。
(任意)右手についても、カスタムメッシュへのリターゲティングセクションの操作全体を繰り返します。
[File (ファイル)] > [Build Profiles (ビルドプロファイル)]に移動し、[Add Open Scenes (開いているシーンを追加)]ボタンをクリックして、シーンを起動する準備をします。
これで、シーンをビルドできるようになりました。
[File (ファイル)] > [Build And Run (ビルドして実行)]の順に選択するか、Linkが接続されている場合は[Play (プレイ)]をクリックします。
現在のシーンの読み込みが完了したら、手をあげてください。これで、カスタムハンドモデルが表示されるようになるはずです。
動画3: カスタムハンドモデル上でのジェスチャーコントロール表示