Unity与Azure Kinect体感交互开发:从环境搭建到角色驱动实战

📅 2026/8/3 20:05:47 👁️ 阅读次数 📝 编程学习
Unity与Azure Kinect体感交互开发:从环境搭建到角色驱动实战

1. 项目概述:为什么选择Unity与Azure Kinect?

如果你对体感交互感兴趣,想亲手搭建一个能用手势或身体动作控制虚拟角色的应用,但又觉得从零开始门槛太高,那这个项目就是为你准备的。Unity作为游戏开发领域的“瑞士军刀”,以其强大的跨平台能力和丰富的资源生态,让3D交互应用的开发变得直观;而Azure Kinect DK,作为微软推出的深度感知开发套件,则为我们提供了精准的骨骼追踪、深度图像和彩色图像数据。将两者结合,你就能绕过底层算法和硬件驱动的复杂坑,直接聚焦于创造有趣的交互逻辑。

这个教程的目标非常明确:带你从零开始,完成一个可运行的体感交互Demo。你不需要是计算机视觉专家,也不需要精通C++,只要对Unity有基本了解,就能跟着步骤走下来。最终,你将得到一个能够实时捕捉你的骨骼点,并驱动Unity中一个虚拟角色做出相应动作的应用程序。这不仅是学习体感技术的一个绝佳起点,其成果本身也可以作为你作品集里一个亮眼的项目,或者作为未来更复杂应用(如虚拟试衣、健身指导、沉浸式展览)的原型基础。

2. 环境准备与工具链搭建

在开始写任何代码之前,搭建一个稳定、兼容的开发环境是成功的第一步。这一步看似繁琐,但能避免后续90%的“玄学”报错。

2.1 硬件与软件清单

你需要准备以下核心组件:

  1. Azure Kinect DK 硬件:这是我们的数据来源。确保设备完好,USB 3.0数据线和电源适配器齐全。Azure Kinect DK对USB控制器有要求,建议直接连接在主板原生的USB 3.0接口上,避免使用扩展坞或机箱前置接口,以防供电不足或数据传输不稳定。
  2. 开发电脑:建议使用Windows 10(版本1903或更高)或Windows 11。虽然macOS和Linux有社区支持,但官方SDK和工具链在Windows上最完善,本教程也基于Windows环境。
  3. Unity Hub 与 Unity Editor:从Unity官网下载并安装Unity Hub。通过Hub安装一个长期支持版本(LTS),例如2021.3 LTS2022.3 LTS。选择安装时,务必勾选Windows Build Support (IL2CPP)Universal Windows Platform Build Support (UWP)模块,后者对于部署到HoloLens等设备是必要的,即使我们目前只做PC端Demo,安装上也无妨。
  4. Azure Kinect SDK:这是让电脑识别并驱动Kinect硬件的核心。前往微软官方GitHub仓库或发布页面,下载并安装最新版的Azure Kinect SDK。安装过程全部默认即可,它会自动安装必要的驱动和系统组件。
  5. Azure Kinect Body Tracking SDK:骨骼追踪的核心算法库。同样从官方渠道下载安装。请注意:Body Tracking SDK依赖于特定的深度学习模型和计算后端。如果你的电脑有NVIDIA GPU(建议GTX 1060或以上,并更新至最新驱动),安装时会自动配置CUDA和TensorRT支持,以获得最佳性能。如果只有CPU,也能运行,但帧率会低很多。

安装完成后,一个快速的验证方法是:连接Azure Kinect DK,打开系统自带的Azure Kinect Viewer应用。如果能正常看到彩色、深度、红外图像,并且能开启身体追踪(Body Tracking)看到骨骼关节点,说明硬件和基础SDK安装成功。

2.2 Unity项目初始化与插件导入

打开Unity Hub,创建一个新的3D项目,命名为“KinectInteractionDemo”。项目创建后,我们需要引入关键的“桥梁”——Unity与Kinect SDK的通信插件。

最主流且维护良好的选择是Barracuda + Azure Kinect Unity Plugin的组合,或者使用封装更完善的Microsoft Mixed Reality Toolkit (MRTK)的Kinect扩展。为了教程的纯粹性和对底层原理的理解,我们选择前者。

  1. 导入Barracuda:Body Tracking SDK在Unity中需要神经网络推理引擎。Unity官方提供的Barracuda库是一个轻量级的跨平台神经网络推理库。通过Unity的Package Manager(Window -> Package Manager),选择“Unity Registry”,搜索并安装Barracuda
  2. 导入Azure Kinect Unity Plugin:前往GitHub上搜索“Azure-Kinect-Unity-Plugin”或类似仓库,下载最新的.unitypackage文件。在Unity中,选择 Assets -> Import Package -> Custom Package,导入该包。导入时,确保所有文件都被勾选。
  3. 配置项目设置:导入后,检查Player Settings(Edit -> Project Settings -> Player):
    • Other Settings部分,确保Api Compatibility Level设置为.NET Framework(而不是.NET Standard 2.1),因为一些原生插件依赖于此。
    • Scripting Backend中,如果你计划后期打包成可执行文件,使用Mono即可;如果考虑性能或跨平台,可以使用IL2CPP
    • 同样在Other Settings中,找到Allow ‘unsafe’ Code并勾选,因为插件中可能涉及指针操作。

注意:插件导入后,如果控制台出现关于DLL找不到的错误,通常是因为插件预期的Azure Kinect SDK安装路径与你电脑的实际路径不一致。你需要检查插件包中是否有配置文件(如AzureKinect.ps1AzureKinect.dll.config),并根据你SDK的实际安装路径(通常是C:\Program Files\Azure Kinect SDK vX.X)进行修改。这是第一个常见的坑。

3. 核心组件解析与场景搭建

环境就绪后,我们来剖析一下实现体感交互所需的几个核心Unity组件,并搭建一个简单的演示场景。

3.1 理解数据流与核心GameObject

Azure Kinect Unity Plugin通常会提供几个预制的组件(脚本)和示例场景。核心的数据流是这样的:

Kinect设备 -> Kinect管理器脚本 -> 骨骼数据/纹理数据 -> 可视化脚本/应用逻辑脚本

在Unity中,我们通常会创建以下结构的GameObject:

  1. KinectManager:这是一个单例脚本,负责初始化Kinect设备、管理生命周期(打开、关闭)、以及提供访问深度、彩色、骨骼数据的接口。它应该是场景中第一个被初始化的对象。
  2. BodySourceManager:这个脚本附着在KinectManager或一个独立的空物体上,专门用于从KinectManager获取原始的骨骼数据,并将其转换为一个更易用的数据结构(例如,一个包含所有追踪到的人体及其关节点的列表)。
  3. 可视化对象
    • 彩色/深度图像渲染:可以使用RawImage UI组件来显示Kinect捕捉到的彩色摄像头画面,这对于调试视角和位置非常有用。
    • 骨骼点渲染:这是关键。我们需要在3D空间中,用小球(Sphere)或立方体(Cube)来实时表示追踪到的关节点的位置。通常会创建一个空物体“SkeletonRenderer”,然后为其添加一个脚本,这个脚本从BodySourceManager获取数据,并为每个关节点动态生成或更新一个GameObject的位置。
  4. 虚拟角色(Avatar):我们的最终控制目标。可以是一个简单的人形模型,也可以是一个卡通角色。我们需要将Kinect追踪到的骨骼数据,映射到这个虚拟角色的骨骼上。

3.2 搭建基础演示场景

让我们一步步搭建:

  1. 在场景中创建一个空GameObject,重命名为“KinectSetup”。将插件提供的“KinectManager”脚本拖拽给它。
  2. 在“KinectSetup”下创建一个子空物体,重命名为“BodySource”。将插件提供的“BodySourceManager”脚本拖拽给它。
  3. 创建骨骼可视化:
    • 在场景中创建另一个空GameObject,命名为“SkeletonView”。
    • 为其创建一个新的C#脚本,例如SkeletonVisualizer.cs。这个脚本的核心是在Update函数中,从BodySourceManager获取当前帧的所有人体数据,然后为每个人体的每个关节点(Azure Kinect提供32个关节点)在对应3D位置实例化或更新一个小球。为了性能,我们通常会在Start函数中预先创建好32个小球(作为预制体),然后在每帧更新它们的位置。
  4. 创建虚拟角色:
    • 从Unity Asset Store或你的资源库中,导入一个带有人形骨骼(Humanoid Rig)的3D模型到项目中。将其拖入场景,命名为“PlayerAvatar”。
    • 确保在模型的Import Settings中,Rig选项卡下选择了“Humanoid”并成功创建了Avatar。这是后续进行骨骼映射的前提。

现在,运行场景。如果一切配置正确,你应该能在Game视图中看到Kinect捕捉到的彩色画面(如果配置了显示),并且当你在Kinect前移动时,“SkeletonView”下的小球会跟随你的关节移动。恭喜,你已经完成了数据采集和可视化的第一步!

实操心得:在调试骨骼可视化时,关节点位置可能会剧烈抖动或突然消失。这通常是由于遮挡、光照不足(红外摄像头受影响)或距离传感器太近/太远导致的。确保你在Kinect的视场角内(建议1.5米到3米),穿着与背景对比度明显的衣服,并且环境光线不会过于强烈(避免阳光直射)。可以在BodySourceManager中增加一个置信度过滤,只显示置信度(TrackingState)为“Tracked”的关节点,能有效提升稳定性。

4. 骨骼数据映射与角色驱动

这是将物理世界动作映射到虚拟世界的核心环节。我们有两种主流方法:直接变换映射和Unity动画系统(Mecanim)映射。

4.1 方法一:直接变换映射(适用于简单模型)

如果你的虚拟角色结构简单(例如,就是由一些代表头、手、脚的Cube组成的粗糙人形),你可以采用最直接的方式:将Kinect关节点的3D坐标,经过适当的坐标变换和缩放后,直接赋值给虚拟角色对应部位的Transform.position

步骤:

  1. 坐标系统一:Kinect返回的关节位置是基于其自身相机坐标系的(单位是毫米)。Unity使用的是米制左手坐标系。首先需要进行单位换算(除以1000)和可能的坐标系轴向转换(例如,Kinect的Y轴向上,Unity通常也是Y轴向上,但Z轴方向可能相反)。插件通常已经封装了这个转换,但你需要确认转换后的数据是否与你的场景匹配。
  2. 建立映射关系:在驱动脚本中,定义一个字典或数组,将Kinect的32个关节索引(如JointType.HandRight)与你虚拟角色中对应GameObject的Transform组件关联起来。
  3. 每帧更新:在UpdateLateUpdate函数中,从BodySourceManager获取数据,找到追踪到的主要人体(例如,ID为0的人体),然后遍历其关节点,更新虚拟角色上对应Transform的位置。
// 伪代码示例 public class DirectKinectDriver : MonoBehaviour { public BodySourceManager bodySourceManager; public Transform[] avatarJoints; // 按Kinect关节顺序排列的Avatar关节Transform数组 void Update() { var bodies = bodySourceManager.GetData(); if (bodies == null) return; // 获取第一个被追踪的人体 var firstBody = bodies.FirstOrDefault(b => b.IsTracked); if (firstBody == null) return; for (int i = 0; i < firstBody.Joints.Count; i++) { var kinectJoint = firstBody.Joints[i]; if (kinectJoint.TrackingState == TrackingState.Tracked) { // 将Kinect坐标转换为Unity世界坐标 Vector3 unityPos = kinectJoint.Position.ToUnityVector3(); // 假设插件提供了扩展方法 // 应用缩放和偏移(根据你的场景调整) unityPos *= scaleFactor; unityPos += offset; // 更新对应Avatar关节的位置 if (i < avatarJoints.Length && avatarJoints[i] != null) { avatarJoints[i].position = unityPos; } } } } }

优缺点:这种方法实现简单、直接,延迟极低。缺点是动作可能不自然(缺少骨骼约束,手可能会穿过身体),且无法利用Unity强大的动画状态机和融合功能。

4.2 方法二:通过Mecanim驱动人形角色(推荐)

对于复杂、精美的人形角色,我们利用Unity的Mecanim动画系统。Kinect骨骼数据被用来实时生成骨骼姿势,然后通过Animator组件应用到这个姿势上,驱动角色。

步骤:

  1. 配置Avatar:确保你的“PlayerAvatar”模型已正确配置Humanoid Avatar,并且Animator组件引用了这个Avatar。
  2. 创建动画控制器:虽然我们是实时驱动,但仍需要一个Animator Controller。可以创建一个空的控制器,并确保角色的默认状态是一个空的、不播放任何剪辑的状态。
  3. 编写驱动脚本:核心是修改角色的HumanPose。Unity提供了HumanPoseHandler类来高效地读取和写入人形骨骼的姿势。
    • 首先,根据角色的Avatar创建一个HumanPoseHandler实例。
    • 在每一帧,创建一个新的HumanPose结构体。
    • 将Kinect关节的旋转数据(而不仅仅是位置)计算出来,并转换为Unity的Quaternion,然后填入HumanPosemuscles数组。这是最复杂的一步,因为需要将Kinect的32个关节旋转映射到Unity Humanoid的30多个肌肉(Muscle)定义上。通常需要建立一个映射表,并处理坐标系转换。
    • 最后,使用HumanPoseHandler.SetHumanPose()将计算好的姿势应用到角色上。
// 伪代码示例 - 概念性更强 public class MecanimKinectDriver : MonoBehaviour { public BodySourceManager bodySourceManager; private Animator animator; private HumanPoseHandler humanPoseHandler; private HumanPose humanPose; void Start() { animator = GetComponent<Animator>(); humanPoseHandler = new HumanPoseHandler(animator.avatar, animator.transform); humanPose = new HumanPose(); } void Update() { var bodies = bodySourceManager.GetData(); // ... 获取骨骼数据 ... // 1. 将Kinect关节旋转转换为Unity Humanoid肌肉值 // 这是一个复杂的映射函数,需要预先计算好 float[] muscles = MapKinectJointsToHumanMuscles(firstBody.Joints); // 2. 设置humanPose humanPose.muscles = muscles; // bodyPosition和bodyRotation通常可以设为默认或根据根关节(如骨盆)稍作调整 // humanPose.bodyPosition = ...; // humanPose.bodyRotation = ...; // 3. 应用姿势 humanPoseHandler.SetHumanPose(ref humanPose); } private float[] MapKinectJointsToHumanMuscles(List<KinectJoint> joints) { float[] muscles = new float[HumanTrait.MuscleCount]; // 实现具体的映射逻辑,例如: // 计算右肩关节相对于躯干的本地旋转,然后转换为对应肌肉索引(如HumanTrait.MuscleFromName("Right Shoulder Front-Back"))的值 // 这是一个需要大量调试和校准的过程 return muscles; } }

优缺点:这种方法能产生非常自然、符合生物力学的动作,并且可以轻松与现有的动画片段(如走路、跳跃)进行混合。缺点是实现复杂,映射校准耗时,且对Kinect追踪数据的质量要求更高。

注意事项:在实际项目中,我们很少从零开始编写完整的Mecanim映射。更高效的做法是寻找已有的开源解决方案或Asset Store资源包,例如“Kinect v2 with MS-SDK”或“Azure Kinect Unity Integration”的完整项目,它们通常已经包含了经过调试的映射脚本和示例场景。本教程附带的资源包就会提供一套稳定可用的Mecanim驱动脚本和预校准的映射参数,你可以直接使用或在其基础上修改。

5. 实现基础体感交互Demo

有了驱动角色的能力,我们现在来构建一个具体的交互Demo。一个经典且能展示多种技术的例子是:用手势控制一个虚拟球体的发射。

5.1 场景布置与设置

  1. 环境:创建一个简单的平面作为地面,放置你的“PlayerAvatar”角色。
  2. 交互道具:在角色前方创建一个球体(Sphere)作为可交互的物体,为其添加刚体(Rigidbody)组件,并取消勾选“Use Gravity”,让它先悬浮在空中。再创建几个立方体作为目标靶子,摆放在远处。
  3. UI反馈:创建一个Canvas,添加一个Text组件,用于显示当前手势状态或得分。

5.2 手势识别逻辑实现

我们将实现一个“推手”发射球体的手势:当用户快速将右手向前推动时,虚拟角色也做出推手动作,并给球体一个力。

  1. 创建手势识别脚本:新建一个C#脚本,例如GestureRecognizer.cs,将其挂载在角色或一个管理物体上。
  2. 定义手势状态:我们需要追踪右手关节(JointType.HandRight)的位置和速度。
    public class GestureRecognizer : MonoBehaviour { public BodySourceManager bodySourceManager; public float pushThreshold = 1.5f; // 触发推动手势的速度阈值(米/秒) public float cooldownTime = 0.5f; // 手势冷却时间 private Vector3 lastHandPos; private float lastHandTime; private bool isCooldown = false; private float cooldownTimer = 0f; void Update() { if (isCooldown) { cooldownTimer -= Time.deltaTime; if (cooldownTimer <= 0) isCooldown = false; return; } var bodies = bodySourceManager.GetData(); // ... 获取右手关节数据 handJoint ... if (lastHandTime > 0) { float deltaTime = Time.time - lastHandTime; Vector3 deltaPos = handJoint.Position - lastHandPos; Vector3 handVelocity = deltaPos / deltaTime; // 主要判断:速度大于阈值,且方向主要是向前的(Z轴负方向,假设Kinect朝向Z+) if (handVelocity.magnitude > pushThreshold && handVelocity.z < -0.5f) { OnPushGestureDetected(); isCooldown = true; cooldownTimer = cooldownTime; } } lastHandPos = handJoint.Position; lastHandTime = Time.time; } void OnPushGestureDetected() { Debug.Log("Push Gesture Detected!"); // 在这里触发发射球体的逻辑 // 例如:找到场景中的球体,获取其Rigidbody,并AddForce } }
  3. 关联与触发:在OnPushGestureDetected方法中,获取场景中球体的Rigidbody组件,并调用AddForce方法,施加一个向前的力。同时,可以更新UI文本,显示“发射!”。

5.3 添加视觉与音频反馈

为了提升体验,我们需要反馈:

  • 视觉:当手势被识别时,让角色右手短暂发光(通过修改材质或添加粒子效果),或者让目标被击中时爆炸(使用粒子系统)。
  • 音频:添加AudioSource组件,在发射和击中时播放相应的音效。

运行项目,站在Kinect前,尝试快速向前推动你的右手。你应该能看到角色同步动作,球体被发射出去,击中目标并产生效果。一个最基础的体感交互Demo就完成了。

6. 性能优化与调试技巧

体感应用是实时性的,性能至关重要。同时,开发过程中会遇到各种问题,这里分享一些实战经验。

6.1 性能优化要点

  1. 降低骨骼追踪分辨率:在KinectManager或Body Tracking初始化时,可以设置较低的分辨率(如K4A_DEPTH_MODE_NFOV_UNBINNED)和只追踪较少的人体(默认是7,可以设为2),能显著降低计算负载。
  2. 控制更新频率:不是每一帧Unity都需要更新骨骼数据。如果应用对实时性要求不是极端高,可以每2帧或3帧更新一次骨骼数据(在驱动脚本中使用计数器控制),能节省大量CPU时间。
  3. 简化骨骼可视化:在调试阶段后,关掉用于显示骨骼点的小球渲染器(MeshRenderer),或者使用更简单的图形(如GL.Lines)来绘制线条骨骼,这比渲染几十个3D小球要高效得多。
  4. 使用对象池:对于动态生成的骨骼点小球或特效,使用对象池技术复用GameObject,避免频繁的InstantiateDestroy调用。
  5. GPU加速确保:务必确认Body Tracking SDK正在使用你的NVIDIA GPU。可以在Body Tracking初始化后查看日志,或者使用任务管理器查看GPU使用情况。

6.2 常见问题排查表

问题现象可能原因排查步骤与解决方案
Unity运行后无任何图像/数据1. Kinect未连接或USB口问题。
2. Azure Kinect SDK未正确安装。
3. Unity插件DLL路径错误。
1. 检查设备管理器,确认Kinect设备识别正常。换USB口。
2. 用Azure Kinect Viewer测试硬件和SDK。
3. 检查插件配置文件,修正SDK路径指向实际安装位置。
骨骼追踪抖动严重或丢失1. 环境光线过强或过暗。
2. 用户穿着纯黑/纯白或与背景同色衣服。
3. 距离传感器太近(<0.5m)或太远(>3m)。
4. 关节被遮挡。
1. 调整环境光,避免阳光直射传感器。
2. 更换有颜色对比的衣物。
3. 保持在推荐距离(1.5-2.5m)。
4. 确保身体主要部分在视野内,避免双手交叉于胸前等动作。
角色动作怪异(扭曲、翻转)1. 坐标系统一错误。
2. 骨骼旋转映射错误。
3. Avatar配置不正确。
1. 检查插件中的坐标转换函数,确认是从Kinect坐标系转到了Unity左手系。
2. 逐一检查关键关节(如肩膀、髋部)的映射和旋转计算,使用Debug.DrawRay可视化旋转轴向。
3. 在模型的Import Settings中重新配置Avatar,确保骨骼匹配正确。
运行帧率(FPS)很低1. Body Tracking运行在CPU模式。
2. 骨骼可视化或角色驱动脚本效率低。
3. Unity图形设置过高。
1. 确认安装CUDA和TensorRT,并在Body Tracking初始化时选择GPU模式。
2. 按6.1节进行优化,降低更新频率,简化可视化。
3. 在Unity Quality Settings中降低图形质量,关闭抗锯齿等。
手势识别不灵敏或误触发1. 速度阈值设置不合理。
2. 没有进行数据平滑处理。
3. 冷却时间太短。
1. 通过调试打印出手的速度值,根据实测数据调整pushThreshold
2. 对关节位置进行平滑滤波(如指数平滑、卡尔曼滤波),减少抖动带来的误判。
3. 适当增加cooldownTime,防止连续误触发。

6.3 调试工具与小技巧

  • 使用Unity的Debug.DrawRay:在驱动脚本中,可以从每个关节点画出一条线,代表该关节的旋转朝向。这是检查骨骼旋转数据是否正确映射的最直观方法。
  • 打印关键数据到UI:在屏幕角落创建一个调试UI,实时显示右手速度、与摄像机的距离、当前追踪状态等,便于调整参数。
  • 录制与回放:一些高级的Kinect插件支持将骨骼数据序列化保存到文件,然后再从文件读取回放。这对于离线调试手势识别算法、或者制作固定的演示视频非常有用。
  • 分步测试:不要一次性写完所有功能。先确保骨骼数据能正确获取并可视化,再测试驱动简单立方体,最后才驱动复杂人形角色。每一步都稳定了再往下走。

7. 项目扩展思路与资源包使用指南

完成基础Demo后,你可以以此为起点,探索更多可能性。

7.1 扩展你的体感应用

  1. 更多手势:实现“抓取”(判断手是否握拳)、“挥手”(手在水平方向快速移动)、“缩放”(双手距离变化)等手势。核心思路都是持续追踪特定关节的位置、速度、角度或相对关系,并定义状态机来识别。
  2. 多人交互:Azure Kinect最多可同时追踪7个人体。修改你的驱动脚本,为每个追踪到的人体实例化一个对应的虚拟角色,可以实现有趣的多人互动场景。
  3. 与环境交互:结合深度数据。除了骨骼,Kinect还能提供深度点云。你可以用深度数据实现虚拟碰撞,比如当用户的手(通过骨骼位置估算)在深度图像中对应位置的距离小于某个阈值时,触发“触摸”虚拟物体的效果。
  4. 融合其他输入:将体感与语音识别(如Unity的UnityEngine.Windows.Speech命名空间)结合,实现“语音+手势”的复合交互。
  5. 部署到其他平台:Unity项目可以轻松打包为Windows可执行文件、UWP应用(部署到HoloLens 2)等。注意,部署到HoloLens时,需要处理ARM64架构的库依赖和UWP平台的API限制。

7.2 附赠资源包内容与使用

本教程配套的资源包“KinectInteractionStarterPack.unitypackage”包含了以下内容,旨在帮你快速起步并解决常见难题:

  1. 预配置的场景:一个已经搭建好KinectManager、BodySourceManager和简单骨骼可视化场景的.unity文件,导入即用。
  2. 稳定的人形角色驱动脚本:提供了一套经过校准的MecanimKinectDriver脚本及其辅助工具类,包含了从Azure Kinect 32关节到Unity Humanoid肌肉的映射表。你只需要将脚本拖到你的Avatar上,并指定BodySourceManager引用,大部分情况下就能获得可用的驱动效果。
  3. 常用手势识别示例:包含了“推手”、“挥手”、“举手”三个手势的识别脚本,并有详细的注释说明参数含义。
  4. 性能优化工具:一个简单的帧率显示器和骨骼数据更新频率控制器脚本。
  5. 调试材质与预制体:用于骨骼点可视化的低面数小球预制体,以及画骨骼线的调试材质。

使用步骤

  1. 创建一个新的或打开你的Unity项目。
  2. 菜单栏选择Assets -> Import Package -> Custom Package,选择下载的.unitypackage文件。
  3. 在导入对话框中,建议全选所有文件,点击“Import”。
  4. 导入后,在Project窗口的_KinectStarterPack/Scenes文件夹下打开示例场景。
  5. 将你的Avatar模型拖入场景,移除它自带的Animator组件(如果有),然后从_KinectStarterPack/Scripts文件夹将MecanimKinectDriver脚本拖到Avatar上。
  6. 在Inspector面板中,将场景中已有的BodySourceManager对象拖拽到脚本的对应字段。
  7. 运行场景,你的角色就应该能跟随你的动作了。

资源包中的代码都有较为详细的注释,你可以根据自己的需求进行修改和扩展。记住,体感交互的核心是稳定、低延迟的数据和直观、有趣的反馈,多测试、多调整参数,才能打磨出最好的用户体验。