UnityでVRコントローラーの速度、加速度、角速度を取得する

Unity+SteamVRでVRコントローラの速度、加速度、角速度などを取る方法を書きます。

まず、[CameraRig]内のコントローラーのオブジェクトに、Velocity Estimatorというなんかもとからあるスクリプトをくっつけます。

*コントローラーに限らず、つければ速度などを取れるので便利です。


最近何フレームの平均を取るかも簡単に設定できていいですね

僕は試してみて5がいい感じに思えました。

Estimate On Awakeにチェックを入れておくか、VelocityEstimator.BeginEstimatingVelocity関数を呼べば計測が始まるようです。


他の自分のスクリプトなどからアクセスするときは

using Valve.VR.InteractionSystem;

で名前空間を加えた上で、

VelocityEstimator VE = GetComponent<VelocityEstimator>();

などとして取得した後、

VE.GetVelocityEstimate() で速度

VE.GetAccelerationEstimate() で加速度

VE.GetAngularVelocityEstimate() で角速度

をVector3で取得できます!


Vector3.magnitudeを使うと、速度などをそれぞれの大きさ(float型)に変換できるので便利です。


使用例として、自分のゲームでは

刀を刃がついている方向に、ある程度の速さで振ったときのみ攻撃判定(音)が出る

という処理が作れました。

じぇらーのHP

VRChat民のじぇらーのHPです。Vive+UnityでVRゲーム作りにチャレンジしていて、時々Unity関係の記事を書きます。

0コメント

  • 1000 / 1000