Nuitrack 1.5.0
3D スケルトン トラッキング ミドルウェア
 すべて クラス 名前空間 関数 変数 Typedefs 列挙型 列挙子 プロパティ イベント グループ ページ
Nuitrack SDK を使って、初めての Unity プロジェクトを作成

この最初のチュートリアルでは、Nuitrack SDK を使って、基本的な Unity プロジェクトを作成する方法を紹介します。作成した簡単なアプリケーションには、スケルトン検出とトラッキングが含まれていますが、変更を加えることで、本格的な VR アプリケーションにもなります。

完成済みプロジェクトは Nuitrack SDK: [Unity 3D] > [NuitrackSDK.unitypackage] > [Tutorials] > [First Project]にあります。

Ubasic_image10.gif

環境のセットアップ

  1. 最初のステップとして、Nuitrack のダウンロードとインストールを行いますが、手順については、インストールの手順を参照してください。
  2. Unity を公式 Webサイトからダウンロードします。

    注意
    プロジェクトの安定した運用を確保するために、Windows と Linux プロジェクトの場合は Unity 2019.2.11f1 以上の使用を推奨します。本チュートリアルは、Windows環境での検証のみを行っています。
  3. 新規プロジェクトを作成します。

    Ubasic_image1.png

  4. プロジェクトを作成するには、該当するプラットフォームを選択します。 WIndows の場合、[File] > [Build Settings] から、[PC, Mac & Linux Standalone]を選択します。 [Target Platform]にWIndowsを、[Architecture]にx86_64を選択します。
  5. ここからがプロジェクト作成の最も面白い部分ともいえる、スケルトンの検出とトラッキングです。Nuitrack SDK 1.4.1 を公式 Webサイトからダウンロードし、プロジェクトにインポートしてください ( Tutorials/First Project フォルダーを除きます)。Nuitrack SDK をインポートするには、[Project]タブ >[Assets] タブで右クリックし、[Import Package] > [Custom Package]でNuitrack SDKを展開した、{Root}/NuitrackSDK/Unity3d/Nuitrack.unitypackage を選択します。

  6. 結果として、ビルドに必要な要素すべてを含む設定済みの開発環境の用意ができたことになります。

    Ubasic_image2.png

ビルドのセットアップ

  1. 環境の設定が完了したら、プロジェクトのビルドに重要な機能をいくつか決定していく必要があります。
    まずは、空のシーンを[File] > [Save] で保存します。
  2. シーンをプロジェクトに追加します。[File] > [Build Settings] > [Add Open Scenes]コマンドを使用するか、[Project]タブの[Saved Scenes]を選択し、[Build Settings]ウィンドウの[Scenes in Build]フィールドにドラッグ アンド ドロップします。
  3. 会社名と製品名の欄の入力、([File] > [Build Settings] > [Player Settings] > [Company Name] > [Product Name]) を忘れずに行ってください。
  4. [Identification]セクションでは、ビルド名 (バンドル識別子) をcom.(会社名).(製品名) と指定します。デフォルトのままの名前ではプロジェクトをビルドすることはできません。

    注意
    会社名や製品名の入力の際に、数字を使用しないでください。
  5. すべての設定が完了したので、[File] > [Build Settings] > [Build]コマンドを使用して、プロジェクトのビルドを行います。

    注意
    ホットキー:
    Ctrl + Shift + Bキー: ビルドの設定
    Ctrl + Bキー: ビルド
  6. 正しくビルドされると、新しいウィンドウが開き、Windows PCで実行できる .exe 形式のアプリケーションが選択したフォルダーに生成されます。デバイスでアプリケーションを実行すると、以下のような画面が表示されます。

    Ubasic_image4.png

  7. プロジェクトをビルドしている間、すべてのエラーや警告がコンソールに表示されます。

    注意
    ビルド時に、.shlファイルが存在するとビルドでエラーになります。.shlファイルを削除して、再度ビルドしてください。

Nuitrack SDK の初期化、シーンのセットアップ、スケルトン検出の確認

  1. 環境が整いましたので、実際の作業の方に入っていきます。
    [Project]タブで、[Asset] > [Nuitrack] > [Prefabs]を選択し、NuitrackScripts.prefab オブジェクトをシーンまたは[Hierarchy]タブにドラッグ アンド ドロップします。シーンには、オブジェクトが1つだけです。このオブジェクトには、Nuitrack と相互に作用するスクリプトが含まれています。
  2. NuitrackScripts オブジェクトの特性の設定は、右クリックで行います。[Inspector]タブの[Nuitrack Manager]セクションにある[Skelton Tracking Module On]チェックボックスをオンにします。まさにこのモジュールが、ユーザーのスケルトン検出とトラッキングを行います。

    Ubasic_image7.png

    このフィールドには、他のいくつかのモジュールもあることにお気づきでしょう。それらのモジュールについては、続くチュートリアルで説明します。

  3. 空の C# スクリプト NativeAvatar.csを作成します。C# スクリプトの作成は、[プロジェクト]タブの右クリックによって行います。
  4. 間接に関する情報を得るには、まずユーザーを検出する必要があります。まず、ユーザーがフレーム内にいるかどうかを確認するために、CurrentUserTracker.CurrentUser!= 0 condition を使用します。結果は、'User Found'または'User not found' 、いずれかのメッセージが表示されます。このメッセージは、メッセージ変数に保存され、OnGUI() メソッドを用いて表示されます。このドキュメントの最後に記載されているリンクから、イベント機能の実行順についての詳細を確認できます。

    using UnityEngine;
    public class NativeAvatar :MonoBehaviour
    {
    string message = "";
    void Update()
    {
    if (CurrentUserTracker.CurrentUser != 0)
    {
    message = "User found";
    }
    else
    {
    message = "User not found";
    }
    }
    // Display the message on the screen
    void OnGUI()
    {
    GUI.color = Color.red;
    GUI.skin.label.fontSize = 50;
    GUILayout.Label(message);
    }
    }
    注意
    スクリプト コードの変更を保存することで、Unity エディターに反映されます。
  5. シーンに、空のオブジェクトを作成し、Unity が NativeAvatar.cs を実行できるようにします。[GameObject] > [Create Empty]を選択し、NativeAvatar.csスクリプトをオブジェクトにドラッグ アンド ドロップします。
  6. プロジェクトをビルドし (Ctrl + Bキー)、アプリケーションの動作を確認します。
  7. 正しく設定を行っていれば、この段階でユーザーが検出されます。検出結果に応じて、右上に 'User found' または 'User not found' のいずれかのメッセージが表示されます。次に、もう少し複雑なことに挑戦してみましょう!

    Ubasic_image6.png
    注意
    アプリケーションが正しく実行されると、aeroTAP 3Dカメラがアクティブになります。
    aeroTAP 3D カメラが動作していない場合、接続の確認およびNuiTrack SDKが正しくインストールされていない(インストール後にPCを再起動していない)ことが考えられます。
    SDK内のサンプルプログラムを実行して、aeroTAP 3Dカメラが正しく動作していることを確認してください。

スケルトンの視覚化に使用するオブジェクトの作成

  1. Nuitrack を初期化し、ユーザーの検出が完了したなら、次の段階に進みます。スケルトンに関するデータの取得を前提として、関節を視覚化します。
  2. 必要となるスケルトンの関節を特定します: nuitrack.JointTypeGameObject 配列を指定します。GameObject 配列の各要素は、特定の typeJoint に対応します。アプリケーション内では、関節が、選択された PrefabJoint の形式で表示されます。

    public class NativeAvatar : MonoBehaviour
    {
    string message = "";
    public nuitrack.JointType[] typeJoint;
    GameObject[] CreatedJoint;
    public GameObject PrefabJoint;
    ...

  3. Unity において、オブジェクトの特性(Inspector)から必要な関節数(Size)を選択します。[Native Avatar]の[関節の種類]で、必要な関節の種類を指定します。白い球体など、ユーザーの関節を表示するのに使用されるプレハブを[Prefab Joint]にドラッグ アンド ドロップします。

    Ubasic_image9.png
    注意
    Unity でプレハブを作成するには、球体を指定する場合は、[GameObject] > [3D Object]で[Sphere]を選択します。シーンに表示される球体の大きさを 10 cm (Unity での 1単位は 1 m) になるように縮小させます。Scaleの値を1から0.05に変更します。
    Ubasic_sphere.png
    [Project]タブでプレハブを作成します。作成した球体 SphereをProjectタブにドラッグ アンド ドロップします。プレハブの詳細については、このチュートリアルの最後に記載されているリンクをご覧ください。
  4. 関節の視覚化のためのオブジェクトは、保存されているプレハブを使用して作成します。 typeJoint 配列、CreatedJoint = new GameObject[typeJoint.Length] と同じ寸法での配列を作成します。その後、インスタンス機能を使用して、関連するシーンにそれらのコピーを作成します。オブジェクトのコピーを、スクリプトを含むオブジェクトの子オブジェクトとして定義します。結果として、親オブジェクトの位置は、センサーの位置に対応します。

    void Start()
    {
    CreatedJoint = new GameObject[typeJoint.Length];
    for (int q = 0; q < typeJoint.Length; q++)
    {
    CreatedJoint[q] = Instantiate(PrefabJoint);
    CreatedJoint[q].transform.SetParent(transform);
    }
    message = "Skeleton created";
    }

  5. プロジェクトをビルドし (Ctrl + Bキー)、端末でのアプリケーションの動作を確認します。すべて正しく設定されていれば、プレハブの球体は、スクリプトを含むオブジェクトの位置に配置されます。一か所に配置されていないが、1つの球体のように見えます。

    Ubasic_image8.png

データの取得、変換、関節の計測

  1. 関節の視覚化のためのオブジェクトを作成したら、それらの位置を実際のユーザーのスケルトンの関節の位置と一致させる必要があります。
  2. 検出したスケルトンに関するデータを、CurrentUserTracker.CurrentSkeleton を使用して取得します。その後、ループ内の間接に関する情報を処理します。
  3. 必要な関節に関するデータを取得するには、typeJoint[q] を特定する skeleton から取得した GetJoint 機能を呼び出します。
  4. 関節位置は、ToVector3() 機能を呼び出して、現在の関節から計測します:Vector3 newPosition = 0.001f * joint.ToVector3().Unity の Vectors の詳細については、このチュートリアルの最後に記載されているリンクをご覧ください。

    注意
    1 Unity 単位が約 1 m であることを考慮し、取得したデータを調整する必要があります。そのためには、取得したデータに 0.001 をかけます (m から mm への変換)。
  5. 計算された位置を CreatedJoint [q] オブジェクトの newPosition に設定し、typeJoint [q]:CreatedJoint[q].transform.localPosition = newPosition と一致していることを確認します。

    void Update()
    {
    if (CurrentUserTracker.CurrentUser != 0)
    {
    nuitrack.Skeleton skeleton = CurrentUserTracker.CurrentSkeleton;
    message = "Skeleton found";
    for (int q = 0; q < typeJoint.Length; q++)
    {
    nuitrack.Joint joint = skeleton.GetJoint(typeJoint[q]);
    Vector3 newPosition = 0.001f * joint.ToVector3();
    CreatedJoint[q].transform.localPosition = newPosition;
    }
    }
    else
    {
    message = "Skeleton not found";
    }
    }
    注意
    ユーザーを正しく認識するには、Unity のカメラが、スクリプトを含むオブジェクトから約 2-3 m の位置に設定されている必要があります。カメラは、必ずオブジェクトの方を向いているべきです。カメラ位置を設定します。
    Ubasic_camera.png
  6. ここまで来たら、あと一歩です!プロジェクトをビルド( Ctrl+B キー)して、携帯アプリケーションを実行します。全てが正しく設定されていれば、スケルトンの検出とトラッキングが行われ、アプリケーションにも表示されます。お疲れ様でした!

    Ubasic_image10.gif
    aeroTAP 3D USB (3cm Baselineの例)

    注意

    もし、上手くビルドできない場合など、このチュートリアルは、NuiTrack SDKのTutorialの Tutorials/First Project フォルダーにあります。NuiTrack SDKを再インポートして完成品を読み込んで参照、ビルドしてみてください。

これで、Nuitrack SDK を使って Unity プロジェクトを作成する方法がわかりました。これがわかれば、スケルトン トラッキングを含む様々なアプリケーションをどんどん作成できちゃいます!これですべてです。非常にシンプルなサンプルですが、Nuitrack SDK と共に Unity を使用するために知っておくべき基本的かつ重要な項目の多くを含んでいます。次のチュートリアルでは、スケルトン トラッキングを含む、より複雑で機能的な Unity アプリケーションを作成する方法を紹介します。

便利な関連情報へのリンク: