本トピックスの内容は、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 |
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sample05 : MonoBehaviour {
public GameObject humanoid;
public bool mirror = true;
public bool move = true;
public bool headMove = true;
NtUnity.Kinect nt;
NtUnity.UnityChanSkeleton cs;
void Start () {
nt = new NtUnity.Kinect();
cs = new NtUnity.UnityChanSkeleton(humanoid);
}
void Update () {
nt.setRGB();
nt.setSkeleton();
nt.setFace();
nt.imshowBlack();
int n = nt.getSkeleton();
if (n > 0) {
cs.set(nt,0,mirror,move,headMove);
}
}
void OnApplicationQuit() {
nt.stopKinect();
}
}
|


[注意] 骨格の認識状態を表示するためにDLL内でOpenCVのウィンドウを生成しています。 後から生成されたこのウィンドウにフォーカスがあるときは (= Unityのウィンドウにフォーカスがない場合は) Unityの画面は変化しないので注意して下さい。 Unityのウィンドウの上部をクリックしてUnityのウィンドウにフォーカスが ある状態で動作を試して下さい。
Runtime Video UnityDLL05a.mp4, UnityDLL05b.mp4
上記のzipファイルには必ずしも最新の "NtKinectDLL.dll" と "NtUnity.cs" が含まれていない場合があるので、 こちらから最新版をダウンロードして 差し替えてお使い下さい。