Meta Quest開発 -Interaction SDKの使い方-

127K Views

December 16, 22

スライド概要

Oculus IntegrationのInteraction SDKを利用する方法です。
ものを掴むなどのグラブ回りの使い方を解説しています。
対応バージョンは下記のとおり
・Unity2020/2021/2022対応
・Integration 46/55対応

profile-image

XR(VR/AR)のエバンジェリスト。XR技術で世界を変えていきましょう。 https://majimajiwaroze.connpass.com/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

OCULUS INTEGRATION INTERACTION SDKで物をつかむ編 (V46/V55-56対応)

2.

大久保 聡 Mail ovjang@gmail.com Twitter @followapp

3.

環境構築  環境設定については、PluginとProject Settingsの一部を入れていますが、細かな部分は解説されて いるHomeページがたくさんありますので省略します。  プロジェクトはURPで作成しています。  検証済みのバージョンの組み合わせは下記の通りです。  Unity2020-21 Oculus Inetgration 46.0 Oculus XR Plugin 3.2.1(or 1.11.2) Unity 2021.3.12f1 (or 2020.3.29f1)  Unity2022 Oculus Inetgration 55.0 Oculus XR Plugin 4.0 Unity 2022.3.5f1

4.

PLUGINのインポート  Oculus IntegrationをImport Oculus Inetgration 46.0 Oculus Inetgration 55.0

5.

OCULUS INTEGRATION56  ターゲットデバイスに、Quest3が選択可能になります。また、VulcanでもDynamic Resolution (負荷に応じて解像度を動的に変える機能)も使えるようになりました。

6.

PLUGINのインポート  Oculus XR Pluginを利用。 Oculus XR Plugin 3.2.1(or 1.11.2) Oculus XR Plugin 4.0

7.

PROJECT設定  XR Plug-in Managementの設定もいい感じに終わらせる。

8.

PROJECT設定  Oculusの設定

9.

PROJECT設定  Oculusの設定

10.

OCULUS INTEGRATION

11.

新規シーン  OVRCameraRigを検索し、シーンに追加する。

12.

OVRMANAGERの設定  OVRCameraRigをHierarchyから選択し、OVRManagerコンポーネントの設定で用途に応じ、手を 使うかコントローラーを使うか設定を行う。

13.

ハンドトラッキング用のOVRHANDPREFABを追加  OVRHandPrefabを検索し、左右の手のアンカーの下に配置する。

14.

OVRHANDPREFABの設定  プレハブが左手設定になって いるので、右手を設定する。

15.

コントローラ用のOVRCONTROLLERPREFABを追加  OVRControllerPrefabを検索し、左右のコントローラーアンカーの下に配置する。

16.

OVRCONTROLLERPREFABの設定  左右のコントローラーにTouchコントローラー を割り当てる。 両手に 実施

17.

URP用マテリアルに変換(UNITY2020-21)  メニューのEditから、マテリアルを UpgradeしてURP対応にする。

18.

URP用マテリアルに変換(UNITY2022)  WindowからRender Pipeline Convertを開き Material Upgradeをチェックし、Initialize And Convertを押下する。  Convert Assetsを押下する。

19.

Oculus Integration v46とv55で設定内容が異なるため 内容を分けて記載しているのでご注意ください。

20.

INTERACTION SDKを使う INTEGRATION V46

21.

OVRINTERACTIONを追加  OVRInteractionを検索して追加。

22.

OVRINTERACTIONの設定  OVRInteractionに、CameraRigの参照とCameraRigRefを設定する。

23.

INTERACTION SDK側に手の表示をゆだねる  Interaction側で手の表示は行うため、両方の手のOVRHnadPrefabの手の表示部分を削除する。 両手に 実施

24.

HANDSとCONTROLLERSの追加  OVRInteractionの下に、OVRControllers、OVRHandsを追加。

25.

OVRCONTROLLERSの設定①  OVRControllerDataSourceに参照を設定 両手に 実施

26.

OVRCONTROLLERSの設定②  DebugVisualsを非Activeに設定 両手に 実施

27.

OVRHANDSの設定①  両方の手のHandFeeaturesに、World Transformの参照をセット 両手に 実施

28.

OVRHANDSの設定②  両方の手ののOVRHandDataSourceに 両手に 実施

29.

つかむ設定を入れる INTEGRATION V46

30.

コントローラでつかむ①  ControllerGrabInteractorを検索し、ControllerInteractorsの配下に追加する。

31.

コントローラでつかむ②  両方の手のControllerGrabInteractorに、Controllerの参照を設定する。 両手に 実施

32.

コントローラでつかむ③  両方の手のCotrollerInteractorsに、追加したInteractorの参照を設定する。 両手に 実施

33.

ハンドでつかむ①  HandGrabInteractorを検索し、HandInteractorsの配下に追加する。

34.

ハンドでつかむ②  両方の手のHandGrabInteractorに、Handの参照を設定する。 両手に 実施

35.

ハンドでつかむ③  両方の手のHandInteractorsLeft(Right)に、追加したInteractorの参照を設定する。 両手に 実施

36.

INTERACTION SDKを使う INTEGRATION V55

37.

OVRINTERACTIONを追加  OVRInteractionを検索して追加。

38.

OVRINTERACTIONの設定  OVRInteractionに、CameraRigの参照とCameraRigRefを設定する。

39.

INTERACTION SDK側に手の表示をゆだねる  Interaction側で手の表示は行うため、両方の手のOVRHnadPrefabの手の表示部分を削除する。 両手に 実施

40.

HANDSとCONTROLLERSの追加  OVRInteractionの下に、OVRControllers、OVRHandsを追加。

41.

つかむ設定を入れる INTEGRATION V55

42.

コントローラでつかむ①  ControllerGrabInteractorを検索し、ControllerInteractorsの配下に追加する。

43.

コントローラでつかむ②  両方の手のCotrollerInteractorsに、追加したInteractorの参照を設定する。 両手に 実施

44.

ハンドでつかむ①  HandGrabInteractorを検索し、HandInteractorsの配下に追加する。

45.

ハンドでつかむ②  両方の手のHandInteractorsLeft(Right)に、追加したInteractorの参照を設定する。 両手に 実施

46.

つかまれる側

47.

CUBEをつかめるように①  Cubeを作成し、RigidBodyを追加。  落ちないようにUse Gravity=True、Is Kinematic=Trueに設定します。

48.

CUBEをつかめるように②  Cubeに、One Grab Free TransfomerとGrabbableコンポーネントを追加。  GrabbableコンポーネントにTransfomerを設定。

49.

CUBEを手でつかめるようにする  Cubeに、Hand Grab Interactableコンポーネ ントを追加。  Hand Grab Interactableコンポーネントに掴み 位置とRigidbodyを設定。

50.

CUBEをコントローラーでつかめるようにする  Cubeに、Grab Interactableコンポーネントを 追加。  Grab Interactableコンポーネントに掴み位置と Rigidbodyを設定。

51.

 手でもコントローラでも、Touch手でもつかめるようにするならば、Interactableを複数つければ良 いです。

52.

その他のコンポーネント Grabbable 挙動 Grabbable Transformerと組み合わせてものをつかめるようになります。 Physics Grabbable Grabbableコンポーネントと併用し、物理挙動をもつものをつかめるようになり ます。Rigid Bodyは、Use Gravity=True Is Kinematic=Falseで使います。 Transformaer 挙動 One Hand Free Transformer 片手持ち One Hand Translate Transformer XYZの相対移動範囲を限定できる。 平面上を動かしたりする場合に利用。 One Hand Rotate Transformer 回転軸を固定、回転のPivotと回転範囲を指定でき る。 Two Hand Free Transformer 両手持ち

53.

PHYSICS GRABBABLEの例  右手から左手に渡せるようになっ たり、落下物を空中でつかむこと ができます。キャッチボールでき るということです。

54.

ONE HAND TRANSLATE TRANSFORMERの例  移動可能範囲を設定する場合は、 Constrainにチェックをいれる。 XとZを-30cm~30cmしか移動 できないようにし、Yの移動制限 はなしの場合。

55.

TWO HAND FREE TRANSFORMERの例  両手で握って回転や拡大縮 小させる場合。 拡大縮小に制限を設ける場 合は、 Constrainに値を設 定。

56.

HAND POSEの作り方

57.

握った際に事前にきめたポーズで握る  何かの取っ手の形状に即した形でにぎらせたいなど、にぎり状態での手の形をポーズとして設定するこ とが可能です。OVRHands(手のトラッキング)を使う場合にポーズが有効となります。

58.

POSE RECORDER  Hand Grub Pose Recorderか、Hand Grab Pose Live Recorderを使う2通りの方法があります。

59.

ポーズを作成する前準備  mugMeshを検索し、シーン上に配置します。握れるようにGrabbableの設定を追加。

60.

左手のポーズ作成  Hand Grub Pose Recorderをメニューから開きます。  Handと握られる側のRigidBodyを設定します。

61.

ポーズをとって記録します  UnityをPlayし、 手で作りたいポーズを演じます。  狙いのポーズがとれたら、Hand Grub Pose RecorderのRecordボタンを押下します。  全部のポーズが記録できたら、Save to Collectionボタンを押下します。

62.

コレクションを読み込む  UnityのPlayを停止。  Hand Grub Pose RecorderのLoad From Collectionボタンを押下します。

63.

手のポーズ設定  コップの取っ手の場合だと、親指と人差し指だけでつかめるように、親指と人差し指を固定し他の指は 自由に設定する。

65.

反対の手のポーズの作り方

66.

左右の手の握りポーズを変える①  HandGrabInteractableを新規につくりながら、反対の手の作り方を説明します。 Hand Grub Pose Recorderで記録したものがあれば、それをもとに反対の手を作ることも可能です。  空のGameObjectを作成し、HandGrabInteractableを追加。

67.

左右の手の握りポーズを変える②  HandGrabInteractableのAdd HandGrabPoseボタンを押下。

68.

左右の手の握りポーズを変える③  Create Mirrored HangGrabInteractableボタンを押下。  ミラーされた右手用のGameObjectの名前を変更する。

69.

左右の手の握りポーズを変える④  手のポーズとにぎり位置を調整する。ゴーストを操作して手のポーズも手動で変更できる。

70.

左右の手の握りポーズを変える⑤  親側のコンポーネントは、4つだけで良い。

71.

遠くの物(GAMEOBJECT)を選択する

72.

コントローラーのRAYを使う①  ControllerRayInteractorを検索し、ControllerInteractorsの配下に追加する。

73.

コントローラーのRAYを使う②  両方の手のControllerRayInteractorに、Controllerの参照を設定する。 両手に 実施

74.

コントローラーのRAYを使う③  両方の手のCotrollerInteractorsに、追加したInteractorの参照を設定する。 両手に 実施

75.

コントローラーのRAYを使う④  ControlerRayInteractor配下のTriggerSelectorで、どのボタンとRayを関連づけるかの設定が可能。

76.

コントローラーのRAYを使う⑤  ControlerRayInteractor配下のVisualsでRayの見た目や長さの変更ができる。

77.

ハンドのRAYを使う①  HandRayInteractorを検索し、HandInteractorsの配下に追加する。

78.

ハンドのRAYを使う②  両方の手のHandRayInteractorに、Handの参照を設定する。 両手に 実施

79.

ハンドのRAYを使う③  両方の手のHandInteractorsLeft(Right)に、追加したInteractorの参照を設定する。 両手に 実施

80.

ハンドのRAYを使う④  HandRayInteractor配下のVisualsでRayの見た目の変更ができる。

81.

選択対象のオブジェクトの準備①  Cubeを新たに作成し赤色に変更。  RayInteractableとInteractableUnityEventWrapper、ColliderSurfaceコンポーネントを追加しま す。

82.

選択対象のオブジェクトの準備②  InteractableUnityEventWrapperに、追加したCubeの参照を設定する。  Collider Surfaceに、追加したCubeの参照を設定する。

83.

選択対象のオブジェクトの準備③  RayInteractableに、追加したSurfaceの参照を設定する。

84.

選択対象のオブジェクトの準備④  InteractableUnityEventWrapperに、 ホバー、アンホバー、セレクトイベント 発生時の処理を追加する。  Objectの参照にCubeを入れて、メッ シュレンダラーのマテリアルで、それぞ れ青、赤(もとの色)、緑をセットする。

85.

POKEでボタン操作

86.

コントローラーのPOKEを使う①  ControllerPokeInteractorを検索し、ControllerInteractorsの配下に追加する。

87.

コントローラーのPOKEを使う②  両方の手のControllerPokeInteractorに、Controllerの参照を設定する。 両手に 実施

88.

コントローラーのPOKEを使う③  両方の手のCotrollerInteractorsに、追加したInteractorの参照を設定する。 両手に 実施

89.

ハンドのPOKEを使う①  HandPokeInteractorを検索し、HandInteractorsの配下に追加する。

90.

ハンドのPOKEを使う②  両方の手のHandPokeInteractorに、Handの参照を設定する。 両手に 実施

91.

ハンドのPOKEを使う③  両方の手のHandInteractorsLeft(Right)に、追加したInteractorの参照を設定する。 両手に 実施

92.

選択対象のオブジェクトの準備①  空のGameObjectを作成しButtonという名前に変更。  Poke InteractableとInteractableDebugVisualコンポーネントを追加します。

93.

選択対象のオブジェクトの準備②  空のGameObjectをButtonの下に作成し名前をProximity Fieldに変更します。  BoxProximityFieldコンポーネントを追加し、Box Transformに自信のTransformをセットします。

94.

選択対象のオブジェクトの準備③  空のGameObjectをButtonの下に作成し名前をSurfaceに変更します。  PlaneSurfaceコンポーネントを追加し、向きを下向きに変更します。

95.

選択対象のオブジェクトの準備④  空のGameObjectをButtonの下に作成し名前をVisualに変更します。  Visualの配下にCubeオブジェクトを追加します。Cubeの色を赤に変更します。  VisualにPokeInteractableVisualコンポーネントを追加し、InteractableとSurfaceの参照を設定。

96.

選択対象のオブジェクトの準備⑤  VisualとCubeオブジェクトの高さを変更します。

97.

選択対象のオブジェクトの準備⑥  ButtonオブジェクトのPokeInteractableコンポーネントのProximity FieldとSurafaceに参照を設定 する。

98.

選択対象のオブジェクトの準備⑦  ButtonオブジェクトのInteractableDebugVisualコンポーネントInteractableViewとRendererに参 照を設定する。

99.

選択対象のオブジェクトの準備⑧  上から押すと、触れると色が青に変わり。押し込むと緑に変わる。  さらに押し込むと、指がボタンにめり込む。

100.

ボタンに指がめり込まないようにする①  LeftHandSyntheticとRightHandSyntheticを検索し、それぞれの手の下に追加する。

101.

ボタンに指がめり込まないようにする②  LeftHandSyntheticのI Modify Data From Source MonoにLeftHandの参照を設定。 両手に 実施

102.

ボタンに指がめり込まないようにする③  もとからあったVisualを非アクティブに変更する。

103.

ボタンに指がめり込まないようにする④  PokeInteracterのHandPokeLimiterをアク ティブに変更する。

104.

ボタンに指がめり込まないようにする⑤  HandPokeLimiterに、LeftHandSyntheticの参照を設定する。 両手に 実施

105.

CURVED UI作成

106.

CURVED UIの作成①  以下のHierarchyのようにGameObjectを生成 U I /Event System Emp ty GameObject Emp ty GameObject U I /Canvas Emp ty GameObject

107.

CURVED UIの作成②  EventSystemのInspector

108.

CURVED UIの作成③  UI CylinderのInspector (Cylinder: Curved UIが表示される物) Cyli nderの位置 Cyli nderのRadius Curved U Iの表示場所:内側、外側 Cyli nderの高さ:0 = 無制限

109.

CURVED UIの作成④  Curved PanelのInspector

110.

CURVED UIの作成⑤  CanvasのInspector U I 選択 ( Childも全部UIで設定) Comp onent追加時、Alertが出たらAuto-Fixを押す W orld Sp ace選択 U I 選択

111.

CURVED UIの作成⑥  MeshのInspector

112.

CURVED UIの作成⑦  Culling Mask設定:UnityのUIは見えないように、全てのCameraのMaskからUIは選択解除

113.

CURVED UIにRAY機能追加

114.

CURVED UIのRAY機能追加①  Curved PanelのInspector 追加 追加 追加

115.

DIRECT TOUCH UI作成

116.

DIRECT TOUCH UIの作成①  以下のHierarchyのようにGameObjectを生成 U I /Event System ( 既に存在している場合は、それを使う) Emp ty GameObject Emp ty GameObject U I /Canvas

117.

DIRECT TOUCH UIの作成②  EventSystemのInspector

118.

DIRECT TOUCH UIの作成③  Pokeable CanvasのInspector 位置調整

119.

DIRECT TOUCH UIの作成④  Proximity FieldのInspector CA N VASをOverlapするように

120.

DIRECT TOUCH UIの作成⑤  CanvasのInspector De fault選択 ( Childも全部Defaultで設定) W orld Sp ace選択

121.

POSE DETECTION

122.

SHAPE(手の模様) DETECTIONの作成①  指の模様 Curl (参考: Pose Detection | Oculus Developers) Flexion Abduction Opposition

123.

SHAPE(手の模様) DETECTIONの作成②  Shapeファイルを作成

124.

SHAPE(手のポーズ) DETECTIONの作成③  Shapeファイルを作成: Bunny模様に合わせて、Shapeを設定する

125.

SHAPE(手の模様) DETECTIONの作成④  以下のHierarchyのようにGameObjectを生成 Emp ty GameObject Emp ty GameObject 3 D Ob ject/Cube

126.

SHAPE(手の模様) DETECTIONの作成⑤  PosesのInspector

127.

SHAPE(手の模様) DETECTIONの作成⑥  BunnyのInspector 右手 先作成したBunny shape

128.

SHAPE(手の模様) DETECTIONの作成⑦  Debug CubeのInspector (Bunny模様をすると -> Cubeが緑色になるように)

129.

TRANSFORM DETECTIONの作成①  Bunnyに、Transform detectionを追加 (Bunny模様 + 手のひらを前にする -> Cubeが緑色になる) 追加 手のひらを前にする時 追加 De fault設定ファイル De tectionが2つ(Shape, Transform)になったため、And条件を設定

130.

PREFAB POSEの利用①  RockPose prefabを追加 R oc kPose p refab 右手

131.

PREFAB POSEの利用②  Debug CubeのInspector (Rock模様をすると -> Cubeが緑色になるように)

132.

CONTROLLERHANDSの設定

133.

HANDS / CONTROLLER / CONTROLLER HANDS  入力方法と見え方の組み合わせ Prefab名 つかむ/つかまれる OVRHands HandGrabInteractor HandGrabInteractable OVRControllers ControlleGrabInteractor GrabInteractable OVRControllerHands HandGrabInteractor HandGrabInteractable 入力 見え方

134.

CONTROLLERHANDSの設定①  以下のようにHierarchyを変更 (左ControllerHandは右ControllerHandと同様に設定) Pre fab Pre fab A c tive Pre fab A c tive Pre fab

135.

CONTROLLERHANDSの設定②  ControllerHandInteractorsのInspector

136.

CONTROLLERHANDSの設定③  HandPokeInteractorのInspector

137.

CONTROLLERHANDSの設定④  HandPokeLimiterのInspector

138.

CONTROLLERHANDSの設定⑤  HandGrabInteractorのInspector

139.

CONTROLLERHANDSの設定⑥  HandGrabAPIのInspector 追加

140.

CONTROLLERHANDSの設定⑦  HandGrabVisualのInspector

141.

CONTROLLERHANDSの設定⑧  HandRayInteractorのInspector

142.

CONTROLLERHANDSの設定⑨  OVRControllerHandDataSourceのInspector

143.

その他

144.

握られているかどうかを判断  自分が握られているかどうか、GrabInteractableのStateを参照できる。

145.

手のコライダー  手の指1本1本にコライダーを自動で付ける。Is Triggerがfalseのコライダーとなるので注意。