ざくっとViveでものを掴もうとしたらどうもうまくいかなくて困った。
探したらUnityのSteamVRSDK>Extras>SteamVR_TestThrow.csというよさげなサンプルがあったのでそれ参考にそれっぽい何かを実装したので覚書。
最初にやったこと
- OnTriggerStay内でトリガーボタンが押されたか判定をする
- 押されたら「手」のTransformの子にして、rigidbodyのisKineticをtrueにする
- 離されたらisKinetic=false,親子関係解消
これだとそれっぽい動きはするものの、離したときにどういう文脈であろうと真下に落ちるという問題があった
ザクッと必要なこと
- 「手」に掴める範囲の大きさのコライダーをつけてisTrigger=true
- 「手」にEmptyGameObjectを追加してrigidbody+isKinetic=true+useGravity=false
- EmptyGameObjectを触れていてほしい点に移動
- OnTriggerStayの引数GameObject(要Rigidbody)に対して掴み入力があったらFixedJoint追加
- FixedJointのconnectedBody にEmptyGameObjectを代入
- 離した判定があったときはジョイントを殺す
- 離したときに掴んでいたRigidbodyのvelocityとangularVelocityに「手」と同じ値を代入する
何やってるのか
- 掴んでいるときはfixedJointで接続
- 離したときは手の加速度角速度と同じ値を対象にも与えつつfixedJoint削除
読み直したときに何書いてあるかわからなかったら書き直す。