本トピックスの内容は、NtUnity.cs version 1.1 以降に対応します。
目次へ「Unityちゃん」パッケージのダウンロードサイトは http://unity-chan.com/ です。 このサイトから Download -> 「キャラクター利用のガイドライン」-> 「ユニティちゃんの3Dモデルデータ」を選択して、 UnityChan_1_2.nitypackage をダウンロードして下さい。
「ユニティちゃん」の3Dモデルデータ(unitychan.fbx) の内部の座標系は、 かなり特殊であるように私には思われます。 各ボーンの Transform.rotation には、まず座標系をリセットするために 「最初にz軸回りに-90°、次にy軸回りに90°」回転してから、 global座標系での本来の向きを設定する必要があります。 また、モデル全体の Transform.rotation も、まず座標系をリセットするために 「最初にz軸回りに-90°、次にy軸回りに-90°」回転してから、 global座標系での本来の向きを設定しなくてはいけません。
「ユニティちゃん」のモデルデータは頭から長いおさげ髪がでているので、 顔の向きが変化すると(= 頭が動くと)非常に目立ちます。 顔の向きの認識は失敗することがあり、また誤差のため細かく動くのですが、 それをそのまま「ユニティちゃん」の頭の動きに反映させると非常に目障りに感じます。 したがって、「ユニティちゃん」のモデルでは、認識した顔の向きの変化に 即追随するのではなく平均(移動平均)などを使って動かす方が適切のような気がします。
「Unityちゃん」のモデルデータは、Unityにimport してから Inspectorウィンドウの Rig で自動で Configure すると、 HumanBodyBones.Neck のボーンは割り当てられません。 UnityのHumanoidでは NeckはOptional なボーンとみなされています。 「ユニティちゃん」のデータにNeckを手動で割り当てることはできますが。 この例では敢えてNeckのBoneを使ってはいません。
ダウンロードしたzipファイルは必ずしも最新のファイルを含んでいるとは限りません。 以下のファイルを新しいバーションに置き換えて下さい。
Assets/Plugins/x86_64/NtKinectDLL.dll Assets/Scripts/NtUnity.cs
File -> New Scene
File -> Save Scene as ... -> Sample05.unity
import すると Assets/UnityChan/ として見えます。
もしも値が"Humanoid" 以外の場合は、Humanoid に変換して下さい。
Assets/UnityChan/Models/unitychan.fbx がモデルですので、これをhierarchyにドラッグします。 Hierarchy で unitychanを選択した状態で、Inspector の Transform からSettings を"Reset" をクリックしておきます。
上部のメニューから「Assets」-> 「Create」 -> 「C# Script」 -> ファイル名は Sample05
Sample05.cs |
|
[注意] 骨格の認識状態を表示するためにDLL内でOpenCVのウィンドウを生成しています。 後から生成されたこのウィンドウにフォーカスがあるときは (= Unityのウィンドウにフォーカスがない場合は) Unityの画面は変化しないので注意して下さい。 Unityのウィンドウの上部をクリックしてUnityのウィンドウにフォーカスが ある状態で動作を試して下さい。
Runtime Video UnityDLL05a.mp4, UnityDLL05b.mp4上記のzipファイルには必ずしも最新の "NtKinectDLL.dll" と "NtUnity.cs" が含まれていない場合があるので、 こちらから最新版をダウンロードして 差し替えてお使い下さい。