QUMARIONのUnity用ライブラリでQUMARIONの体の傾きを測る

Pocket

QUMARION/Unity関連記事の年内ラストです。

 

前に公開したQumarionDotNetという、人型入力デバイス「QUMARION」を.NETやUnityで使うためのライブラリがあります。ライブラリ紹介記事の時点で最低限のネタとサンプルは紹介し切っているのですが、細かい話題として姿勢情報を数字で拾う方法を紹介していなかったのでそれについて補足です。

これまでに書いた記事はコチラの二つです。

 

では本題。サンプルスクリプトにも載せていますが、基本的にQumarionDotNetでは次のような手順でデバイスの情報を拾います。

  1.  名前空間Baku.Quma.Pdkをusing文で宣言
  2.  ライブラリで定義された専用ボーンのモデルをロード
  3.  ハードウェアのQumarionをロード
  4.  モデルにQumarionを関連づけてポーズ情報が同期されるようにする
  5.  モデルのUpdate関数を呼び出して姿勢情報を更新しつつ何かする

サンプルスクリプトでは急に行列処理や行列/クオータニオン変換がドカドカ出てきて何が起きてるのか分かりにくい部分があると思いますが、基本処理はあくまで上に書いている流れに則っています。

 

今回はボーンの可視化とかヒューマノイドとの同期といった難しい目標ではなく、あくまで体全体つまりHip相当の箇所の姿勢情報を取得するのがゴールです。

 

ここでは具体例としてQUMARIONが左右/前後に傾くとアタッチされたオブジェクトが前後左右に動く、つまりQUMARIONをある種の操縦レバーのように使えるスクリプトを考えてみます。動きとしてはこういうの。

この例では前後左右の移動に加えて手を照準に使うとかボタンを押すと浮上するといった機能もついてるのですが、まあそこは無視で。

 

スクリプトはこんな感じです。

上の例ではボーンのルート要素であるHipsから姿勢行列を拾っています。これはUnityの4次正方行列型ではないのですが、成分を見る分にはそこまで困らないかと思います。

で、上の例によれば姿勢行列の成分のうちM11(左上)とM31(左下)の成分値がそれぞれ体の左右、前後の傾き具合に対応しているとして移動への入力に使っています。もちろん実際には行列成分は9個あるため(根本的な意味での自由度は3だか4だかしかありませんが)もっと洗練された方法でデータを拾うことも可能ですが、この程度でもそこそこうまく動きます。需要に応じてうまく使ってください。

短いですが今回は以上です。

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です