3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OculusIntegrationのハンドトラッキングで剣をつかむ方法

Last updated at Posted at 2022-10-30

はじめに

 Oculusのハンドトラッキングをいじるときにものを持つということを実装した際に苦戦したためここに記します。
 初めて技術系の記事を書くのでご指摘等あればいただきたいです。

完成はこれ

sword.gif

OculusIntegrationを使うために

https://framesynthesis.jp/tech/unity/oculusquest/
この記事が一番まとまってて良いと思います。最初のほうにbuildの方法などあるので見てみるといいと思います。

https://vracademy.jp/blog/oculus-quest2-hand-tracking/
こちらの記事ではハンドトラッキングをする方法が書いてあります。

今回の私の記事から入るなら後者のほうが分かりやすいかも。

参考までに、私の使用機器はoculus Quest2でoculus Linkを使用してデバッグをしています。

ここから制作

 今回は右手で剣をつかむことを想定して作ります。

 まず適当なシーンを用意します。そのあとにAsste/Oculus/Interaction/Samples/Prefab/InteractionRig.prefab
をシーンにドラッグアンドドロップします。そしたらプレハブ化を解除してください。
2022-10-30 (13).png

 次にAsste/Oculus/Interaction/Runtime/Prefabs/HandGrabInteractorを下の画像のように配置します。そしたらプレハブ化を解除してください。
2022-10-30 (10).png

 そしたらHandInteractorsRightのInteractor GroupコンポーネントのInteractorにHandGrabInteractorをドラッグアンドドロップして、HandGrabInteractorのHandRefコンポーネントにはRightHandをドラッグアンドドロップしてください。また、HandGrabInteractorにGrabStrengthIndicatorコンポーネントをつけてください。GrabStrengthIndicatorにはこのように2つのスクリプトをアタッチしてください。
2022-10-30 (12).png

これで手側の設定は完了です。

剣の設定

 今回は説明にこの剣のアセットを使用します。
https://assetstore.unity.com/packages/3d/props/weapons/long-sword-212082

 これをインポートしたらまずSwordという空のオブジェクトを作ります。そしたらそこにRigidBody、Grabbable,PointableUnityEventWrapperを追加して画像のような設定にします。画像には剣のモデルが映っていますが、ないのが正解です。(今回はつかむときの音などをつけないのでPointableUnityEventWrapperはなくてもOK)
2022-10-30 (7).png

 そしたら子要素にHandGrabInteractiveという空オブジェクトを追加し、HandGrabInteractable,CylinderSurface,HandGrabPoseのコンポーネントを追加してください。そしたら画像のように手が出ると思いますがパーだと思います。それをいい感じにつかんでそうな感じにします。
2022-10-30 (5).png

 まずはtransformのpositionやrotationを用いてそれっぽい位置と回転にします。その次にHandGrabPoseのJointAnglesをいじることで関節を動かせます。が、えぐい量の数字。初めて見たときにこの量に絶望してoverwatch2に逃げました。が、ご安心を。基本zの値を動かせば人間の関節の動く向きに動きます。適当にいじってみてください。私の値はこんな感じになっています。ご参考までに。ちなみにちょっと上のHandednesss: Rightは右手というう意味で、その下のFingersFreedomはFree,Constrained,Lockedの3つがあります。多分後者になるにつれてつかんでいる間指が動きにくく描画されるという意味だと思います。
2022-10-30 (4).png

 次にSwordの子要素に空のオブジェクトVisualsを追加します。その子オブジェクトに空のRootというオブジェクト、その子要素に先ほど追加したLongSwordのメッシュを追加します。プレハブのLongSwordの子要素にあるやつです。
2022-10-30 (2).png

 これで完了です。OculusLinkなどを用いて確認してみてください!
sword.gif

最後に

まだまだ理解できていない機能がたくさんあるので時間と気分次第で投稿していこうと思います。最後まで見ていただきありがとうございました!

 

 
 

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?