kazumalab tech log

流行りとリラックマと嵐が大好きです。技術的ログ。

UnityでOculus Touchを使うメモ ~ものを掴む編~

かずまです。

ようやく卒業の方が落ち着いてきたのでOculusの開発メモを残しておきたいと思います。
今回はTouchでものをつかむという部分をメモっておきます。


結構基本的なことですがSteamとはちょっと仕様が違いますので書いておこうと思います。

Touch

https://www.instagram.com/p/BQP8q9VhuVZ/
Oculus Touch#oculusすごい#卒論終わり次第#開発する#VR

これがOculus Touchです。
めっちゃいい。ボタンとかにもセンサーがついてて、指がどのボタンを触れているか、みたいなのを検知できます。
すごい!

ちょっと発売から遅れましたのですでにTouchの記事はいっぱいあるかも。。。

Oculus SDKを入れる

参考にしたサイトはこちら

framesynthesis.jp

いやーk0rinさんのブログは毎回助かる...。
Steam VRの時もお世話になりました。

ここを参考にOculus SDKをOculus Developerサイトから落としてきて入れます。

さらにOculus Avatar SDKも入れておきます。
これは手とかTouchを表示する際に必要になってきます。

サンプルシーンを可変していく

Assets/OvrAvater/Samples/Controllers/Controller.unity
を開きます。

今回はこのシーンをいじっていきます。

ものをつかんでみる

ほんとは手の形にあわせた持ち方というのを提案したかったのですがちょっと実装不足。

Touchを表す位置は
OVRCameraRig/TrackingSpace/LeftHandAnchor
OVRCameraRig/TrackingSpace/RightHandAnchor
にあります。

ここにColliderとかスクリプトを追加していきます。
まずはRight,LeftHandAnchorの子としてhavePointを作ります。

次にSphereのColliderのisTriggerをtrueにします。

次にLeftHandAnchorにOVRHand.csというスクリプトを作って貼り付けます。


OVRInputはどこでも呼べる!

UnityのInputのようにどこでも呼べるのは便利ですね。
Steamだと少し面倒だった気がする...。

enumを使ってどっちの手かを認識させる

もっといい方法ありそうですが、
Triggerを引いたときにRightかLeftを指定しないといけません。

if (OVRInput.GetUp (OVRInput.RawButton.RHandTrigger)) {
  // RightControllerのトリガーを引いた
}

あとはControllerのVelocityをとるときにどっちのコントローラーかを書く必要があります。
しかし、面倒なのでpublicのenumでInspectorでRightかLeftを選択できるようにします。

Awake()内でそれに合わせて(OVRInput.RawButton)RHandTriggerやLHandTriggerをセットします。
これで面倒はなくなります。

Oculus TouchのVelocity

OVRInput.GetLocalControllerVelocity(/* どっちのコントローラーかを記述 */);

これで取れます。

つかみたいオブジェクトの設定

2つ設定があります。

tagを"holdable"に設定します

Rigidbodyを付ける

これで再生すればできるはずです!
指とオブジェクトとかぶちゃってるのでほんとはつかんでる感じにしたいのですが...。
それは次回ですかね。

今回はこんな感じです。