Azure Kinectを使ってBodyトラッキングし、Unity上のCubeを右手と左手で操作するところまでいきます。
前提
- Windows10
- Unity2021.2.4f1 / Unity2022.3.0
手順
1. 環境のセットアップ
2. Unity
2.1 必要なファイルのダウンロード
-
Sample Unity Body Tracking Application@Azure Kinect Samplesにアクセスして以下3つのファイルをダウンロードする
- MoveLibraryFiles.bat
- app.config
- packages.config
2.2 設定
- プロジェクト作成
- Assetsフォルダと同じところに前準備でダウンロードしたファイルを配置
- Riderでソリューションを開いて、NuGetのリストアを実施。やり方はこちら
- コマンドプロントからMoveLibraryFiles.batを実行
2.3 動作確認
- 4つのスクリプトをダウンロードします。
-
Azure-Kinect-Samples
- Body.cs
- Constants.cs
- CustomColors.cs
-
AzureKinectTester.cs
- 上記3つはMSのリポジトリのものですが、こちらは上記リポジトリに合ったものを動作確認用に簡略化したものです。
-
Azure-Kinect-Samples
- テストシーンを作成します。
- UnityEditorから実行すると、BodyTrackingが正常に動作していれば、Kinectに手を振れば、Unity上の右手と左手も動くはずです。
エラー対応
Lightweight.dllが重複しています
エラー
error CS1703: Multiple assemblies with equivalent identity have been imported: 'C:\path\Assets\Plugins\System.Reflection.Emit.Lightweight.dll' and 'C:\Program Files\Unity\Hub\Editor\Version\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll'. Remove one of the duplicate references.
対応方法
Pluginsのほうを削除して解消。
Kinectが起動できない
エラー
AzureKinectBodyTrackingCreateException: result = K4A_RESULT_FAILED
対応方法
TrackerConfiguration.DefaultだとGPUを利用するが、環境によってはCUDAが使えないのでエラーになる。CPUを利用する設定にすることで解消。
var tra = new TrackerConfiguration()
{
ProcessingMode = TrackerProcessingMode.Cpu,
SensorOrientation = SensorOrientation.Default
};
System.Memory が二カ所にあります
エラー
Assets\Scripts\AzureKinect\SkeletalTrackingProvider.cs(89,50): error CS0433: The type 'MemoryMarshal' exists in both 'System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' and 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
対応法
Pluginsのほうを削除して解消。
備考
- https://learn.microsoft.com/ja-jp/azure/kinect-dk/body-joints
- 単位はミリメートル
- 座標は右手系
- 原点はカメラの焦点
- X軸右が正
- Y軸下が正
- Z軸前方が正