にほんブログ村 IT技術ブログ IT技術メモへ ブログ村 IT技術ブログへ ブログ村 オヤジ日記へ ブログランキング・にほんブログ村へ

Try Unity _9 UNITYでKINECTを使ってみる Zigfu編

UNITYでの2Dの扱いはだいぶ分かったので、いよいよ3Dをやってみたい。
でも、基本的にゲームを作る気はあまりなくどうしようかと思案した結果
KINECTを学んでみることにした。

また、KINECTを扱うライブラリはMicrosoftの標準ライブラリなど、他にも存在するが、とりあえず簡単そうなところで、まずは、ZIGFUを使ってみた。


Zigfuについて

zigfu ZDK とは、Xtion や Kinect をWeb上やUnityで動かすためのライブラリ。

トライアル版は無料。商用利用可能な有償版は1ユーザあたり$200で購入の必要。

将来はFLASHにも対応する見たいですが、ずっとcoming soon...のまま。

また、厄介なのはドキュメントがない。(正確にはjavascript版のドキュエントしかない)

なので、JSのドキュメントを参考にするか、付属のサンプルを解析するしかない。と思う。

こういった点を踏まえると、今後、発売されるKINECT2でも対応できるのか、またはしてくれるのか...

などなど、不安要素も多いので標準のライブラリを習得する方が良いのかもしれない。

なので、タイトルはZIGFU編にしてみた。


導入編


① Zigfu公式サイトより、ライブラリをダウンロード。

② ダウンロードしたZDK_Unity40_1.1_trial.unitypackageをプロジェクトビューに
  ドラッグ&ドロップでインポートすると、Zigfu内のいろんなパッケージが一覧で表示され
  どれをインポートされるか聞かれるので、全て(ALL)選んで、インポート(import)。

  僕のPCでは、この時点でコンソールにエラーがでた。
  
  ダブルクリックすると、ソースコードが表示され、
  「'UnityEngine.GameObject.active' は古い形式です」みたいなことになってた。
  
  どうやら、UNITY4で修正された非推奨のメソッドがまだ使われていることが原因みたい。

  シーンを保存して、UNITYを再起動するとエラーは消えている。

  非推奨のメソッドは、推奨型に直すんだったら

  ActivateTrigger.cs

  targetGameObject.active = true; を
  ↓ 
  targetGameObject.Setactive(true) みたいに修正すれば良いみたい。
     

③ ZigFu/SampleScenesの中にサンプルのシーンが入っているので
  一通り遊んでみると面白い。


基本的な使い方


① まず、Zigfuの基本スクリプトをオブジェクト化し、ゲームオブジェクトとして登録します。
  GameObject → Create Emptyで適当な名前で、空のオブジェクトを作ります。
  僕はzigfuという名前にしました。そのままですね。(笑)

② Assets → Zigfu → Script → Zig をアタッチします。
  
  ZigはZigfuのメインスクリプトです。 これは必ず必要です。

インスペクタービューで以下にチェックを入れておきます。
  Update Depth  ・・・深度情報を更新するか
  Update Image  ・・・カメラ画像を更新するか
  Update LabelMap ・・・?なにこれ。わかる方ヘルプ。

③ 必要に応じて、いろいろアタッチできます。

  今回僕が実装したのは、ZigEngageSingleUserだけですが、
  他にもいろいろ実装できます。 

  Assets → UserEngagers → ZigEngageSingleUser ...シングルユーザを取得します
  Assets → Viewers → ZigUsersRadar・・・ユーザーまでの距離を取得します
  Assets → Viewers → ZigDepthViewer・・・深度ビューワを取得します

④ 次にKINECT+Zigfuで動かすオブジェクト(人)を作っていきます。
  GameObject→Create Emptyで適当な名前で、空のオブジェクトを作ります。
  僕はmanという名前にしました。

  このmanオブジェクトに
  Assets → UserControls → ZigSkeletonをmanにアタッチ。
  
  Updata Joint Positions・・・ジョイントポジジョンの更新
  Updata Root Positions・・・ルートポジションの更新
  Updata Orientation・・・方向?

  
➄ ヒエラルキービューからZigfuを選択。インスペクターでZigEngageSingleUserを確認し、
  Engaged Users項目のSizeプロパティに1をセットします。するとElement0という項目が出てくるので
  ここにmanオブジェクトをアタッチします。

  これで、zigfuとmanオブジェクトの紐つけができました。
  Playボタンを押して、エラーがでないことが確認できますが、何も表示されないと思います。
  これはmanオブジェクトが空っぽの状態なので、何も表示されていないだけです。

⑥ では、MANオブジェクトにボーン(関節)を付けていきましょう。

  GameObject → Create Other → Sphere(CubeでもCapsuleでも)を追加します。
  少し大きいので、Scaleを0.2ぐらいにしておきます。
  オブジェクトをDeplicate(複製)して、全部で18個のSphereを作ります。
  また、分かりやすくするため作成したSphereはmanオブジェクトの子としておくとよいと思います。
  
  作成したSphereをhead、neck、torso、waist、leftcollar、lefthand、leftsholder、lftelbow、
  rightcollar、righthand、rightsholder、rightlbow、leftknee、leftfoot、leftankle、
  rightknee、rightfoot、rightankleという名前にしておきます。

manオブジェクトを選択し、インスペクターのZigSkeltonを確認し、
  Head、Neckなどに、先程作成したSphereをそれぞれアタッチします。

⑦ メインの位置をmanオブジェクトの位置を調整して、Playビューを押すと下記のように表示されるはず。
  ここまでノープログラム。sphereに色やら画像などのテクスチャーを与えれば、これだけでいろいろできそうです。



感想

 ・動いたときはかなりうれしい。
 ・ドキュメントがないのはやっぱり辛い。
 ・英語の知識もあった方が良い。僕は関西弁以外わからない。