ハンドグラブポーズを作成する(PC)
このチュートリアルでは、Interaction SDKでカスタムハンドグラブポーズを記録し、つかんだオブジェクトに手を合わせる方法をどのように制御するかを学びます。ポーズを記録すると、その指やスケール、ミラーリングを調整して、さまざまなサーフェスに適応させることができるようになります。
注: このチュートリアルにはLinkが必要です。LinkはMacをサポートしていないので、このチュートリアルにはMacを使えません。
オブジェクトのポーズを記録する前に、いくつかの設定を行う必要があります。
ハンドグラブポーズを記録したいUnityシーンを開きます。
Meta > [Interaction (インタラクション)] > [Hand Grab Pose Recorder (ハンドグラブポーズレコーダー)]を選択して、[Hand Grab Pose Recorder (ハンドグラブポーズレコーダー)]ウィンドウを開きます。
ウィンドウが表示されます。
Hand Grab Pose Recorder (ハンドグラブポーズレコーダー)ウィンドウ
このウィンドウで、以下の必要なプロパティを設定します。
| プロパティ | 説明 |
|---|
ポーズの記録に使う手 | 記録する手。これは、階層のOVRInteraction > OVRHandsで、右手または左手のいずれかです。 |
ハンドグラブポーズを記録する対象のGameObject | ポーズを記録する対象のGameObject |
記録されたポーズを手が視覚化するためのprefabプロバイダー | GhostProviderは生成されるポーズをすぐに視覚化します。このフィールドには、プロジェクト内で最初に見つかったアセットが自動的に設定されます(パッケージにはデフォルトのアセットが含まれています)。 |
HandGrab Interactableデータコレクション(任意) | 保存したり読み込んだりできるアセットにより、[Play (プレイ)]モードと[編集 (Edit)]モードを切り替えてもそれらのポーズが失われないようにします。アセットがない場合は、保存時に新しいアセットが自動的に生成されます。 |
つかめるオブジェクト用のカスタムグラブポーズを記録します。
[Play (プレイ)]モードに切り替えます。
前のセクションで選んだ手を使って、ターゲットとして選択したGameObjectを包みます。
手が目的のポーズになったら、記録キー(デフォルトではスペースはHandGrabPoseRecorderウィンドウにフォーカスがある状態を必要とします)か、空いている手でエディターのRecordHandGrabPoseボタンのいずれかを押します。
シーンでは、HandGhost GameObjectが記録したポーズを実行する手として表示されます。
必要に応じて前のステップを繰り返します。後でミラーリングできるので、左右両方のHandPoseを記録する必要はありません。
[Play (プレイ)]モードを終了する前に、[Save To Collection (コレクションに保存)]ボタンをクリックします。
これで、HandPoseがアセットに保存されます。保存したHandPoseは[Edit (編集)]モードで取り出すことができます。コレクションアセットを提供しなかった場合、自動的に生成されます。
ポーズを記録したら、[Edit (編集)]モードで微調整、ミラーリング、複製して整えることができます。
[Edit (編集)]モードで[Load From Collection (コレクションからの読み込み)]ボタンをクリックします。
記録したHandPosesが復元されます。復元されたポーズにはそれぞれHandGrabInteractableとHandGrabPoseが含まれたGameObjectがあります。
以下のセクションを使って、生成されたHandPosesを必要に応じて微調整します。
HandGrabPoseを選択すると、[Scene (シーン)]ウィンドウにポーズを表すGhostHandが表示されます。エディターでギズモが有効な場合、GhostHandの関節の周囲に複数の円形ハンドルがあります。これらのハンドルは、各関節の屈曲と外転の角度を調整します(外転は指の付け根のみ可能)。HandPose.FingersFreedomフィールドでFreeに設定されている指については、ハンドルが表示されません。
HandGrabPoseを選択します。
エディターでギズモが有効な場合、GhostHandの関節の周囲に複数の円形ハンドルが表示されます。
各指の関節の調整に使用される円形ハンドル。これらのハンドルを使って、指が正しい位置になるまで関節を調整します。
HandGrabPose自体は、オブジェクトとの関連で手首のポーズを指定するだけです。このポーズをサーフェスに沿って使えると指示することもできます。例えば、本の周囲の縁をつかむ場合や、車のハンドルの周囲をつかむ場合です。
HandGrabPoseが有効なサーフェスの特定には、
IGrabSurfaceを実装する以下のいずれかのコンポーネントを使えます。
- CylinderGrabSurface: 長さ、方向、最大角度を調整可能な円柱。HandGrabExamplesシーンのコップやたいまつの縁など、円形または円柱状のオブジェクトをつかむ際に使います。
- SphereGrabSurface: 球面。球状オブジェクトの中心に配置して、任意の回転のHandPoseを使ってつかめるようにします。
- BoxGrabSurface: 縁を調整可能な長方形。本、電話、テーブルなど、長方形のオブジェクトの縁をつかむ場合に使います。
IGrabSurfaceを追加するには、以下の手順に従います。
- 上記のコンポーネントのいずれかをHandGrabPoseGameObjectに追加します。
- [Inspector (インスペクター)]で、HandGrabPoseの(任意) [Surface (サーフェス)]フィールドをコンポーネントに設定します。
- [Scene (シーン)]ウィンドウで、サーフェスギズモの周囲でマウスを動かして、手首がオブジェクトをスナップする様子が表示されるようにします。
- GrabSurfaceインスペクターの中に用意されているハンドルかフィールドのいずれかを使うことによって、目的の範囲内に手が留まるようにサーフェスの形状を調整します。
IGrabSurfaceのCylinderGrabSurface実装を使っているHandGrabPose
アプリでユーザーに手のカスタムスケーリングを許可する場合(デフォルトの動作)、HandGrabInteractableに対してデフォルト(1xスケール)のHandGrabPoseを変更したコピーをいくつか用意してください。これらの変更したコピーはカスタマイズされた手のサイズに使うようにすると、システムがそれらの間の補間処理をして、ハンドグラブが常にうまく揃って見えるようにします。
- 手のスケーリングされたコピーを作成するには、以下のいずれかを実行します。
HandGrabPose GameObject(存在する場合はGrabSurfaceと並行して)を複製します。
GameObjectのローカルスケールを調整します。
(任意)指の回転とサーフェスの制限を微調整します。
新しいGameObjectをHandGrabInteractableに割り当てます。
HandGrabInteractableコンポーネントで、ScaledHandGrabPosesKeysスライダーを0.8xと1.2xの位置に動かします。
[Add HandGrabPose Key at X scale (XスケールでHandGrabPoseキーを追加する)]ボタンをクリックして、キーを作成します。
(任意)HandGrabInteractableの新しく作成されたHandGrabPointで指とサーフェスを微調整します。
Inspector (インスペクター)で、シーンビューを見ながらScaledHandGrabPosesKeysスライダーを動かすことで、異なる手のサイズ間の移行が円滑になるようにします。
HandGrabPoseは手動でも自動でもミラーリングできます。これにより、両手のポーズが存在します。
- ミラーリングされたポーズを作成するには、以下のいずれかを実行します。
HandGrabInteractableを複製します。
[Inspector (インスペクター)]で、各HandGrabPose GameObjectのHandednessプロパティを変更します。
各HandGrabPoseの位置を手動調整するので、うまく揃います。
[Inspector (インスペクター)]のHandGrabInteractableで作成したHandGrabPosesがその手のHandGrabInteractableにリストされていることを確認します。
コンポーネントで、[Create Mirrored HandGrabInteractable (ミラーリングされた HandGrabInteractableを作成する)]ボタンをクリックします。
すべてのHandGrabPosesを新しいHandGrabInteractableにミラーリングしながら、HandGrabInteractableは複製されます。
(任意)生成したポーズのミラーリングの軸が正しくない場合は、HandGrabPoseの変形を適切な位置に移動してください。