1. 项目概述:为什么选择Unity与Azure Kinect?
如果你对体感交互感兴趣,想亲手搭建一个能用手势或身体动作控制虚拟角色的应用,但又觉得从零开始门槛太高,那这个项目就是为你准备的。Unity作为游戏开发领域的“瑞士军刀”,以其强大的跨平台能力和丰富的资源生态,让3D交互应用的开发变得直观;而Azure Kinect DK,作为微软推出的深度感知开发套件,则为我们提供了精准的骨骼追踪、深度图像和彩色图像数据。将两者结合,你就能绕过底层算法和硬件驱动的复杂坑,直接聚焦于创造有趣的交互逻辑。
这个教程的目标非常明确:带你从零开始,完成一个可运行的体感交互Demo。你不需要是计算机视觉专家,也不需要精通C++,只要对Unity有基本了解,就能跟着步骤走下来。最终,你将得到一个能够实时捕捉你的骨骼点,并驱动Unity中一个虚拟角色做出相应动作的应用程序。这不仅是学习体感技术的一个绝佳起点,其成果本身也可以作为你作品集里一个亮眼的项目,或者作为未来更复杂应用(如虚拟试衣、健身指导、沉浸式展览)的原型基础。
2. 环境准备与工具链搭建
在开始写任何代码之前,搭建一个稳定、兼容的开发环境是成功的第一步。这一步看似繁琐,但能避免后续90%的“玄学”报错。
2.1 硬件与软件清单
你需要准备以下核心组件:
- Azure Kinect DK 硬件:这是我们的数据来源。确保设备完好,USB 3.0数据线和电源适配器齐全。Azure Kinect DK对USB控制器有要求,建议直接连接在主板原生的USB 3.0接口上,避免使用扩展坞或机箱前置接口,以防供电不足或数据传输不稳定。
- 开发电脑:建议使用Windows 10(版本1903或更高)或Windows 11。虽然macOS和Linux有社区支持,但官方SDK和工具链在Windows上最完善,本教程也基于Windows环境。
- Unity Hub 与 Unity Editor:从Unity官网下载并安装Unity Hub。通过Hub安装一个长期支持版本(LTS),例如2021.3 LTS或2022.3 LTS。选择安装时,务必勾选Windows Build Support (IL2CPP)和Universal Windows Platform Build Support (UWP)模块,后者对于部署到HoloLens等设备是必要的,即使我们目前只做PC端Demo,安装上也无妨。
- Azure Kinect SDK:这是让电脑识别并驱动Kinect硬件的核心。前往微软官方GitHub仓库或发布页面,下载并安装最新版的Azure Kinect SDK。安装过程全部默认即可,它会自动安装必要的驱动和系统组件。
- 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扩展。为了教程的纯粹性和对底层原理的理解,我们选择前者。
- 导入Barracuda:Body Tracking SDK在Unity中需要神经网络推理引擎。Unity官方提供的Barracuda库是一个轻量级的跨平台神经网络推理库。通过Unity的Package Manager(Window -> Package Manager),选择“Unity Registry”,搜索并安装Barracuda。
- 导入Azure Kinect Unity Plugin:前往GitHub上搜索“Azure-Kinect-Unity-Plugin”或类似仓库,下载最新的
.unitypackage文件。在Unity中,选择 Assets -> Import Package -> Custom Package,导入该包。导入时,确保所有文件都被勾选。 - 配置项目设置:导入后,检查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.ps1或AzureKinect.dll.config),并根据你SDK的实际安装路径(通常是C:\Program Files\Azure Kinect SDK vX.X)进行修改。这是第一个常见的坑。
3. 核心组件解析与场景搭建
环境就绪后,我们来剖析一下实现体感交互所需的几个核心Unity组件,并搭建一个简单的演示场景。
3.1 理解数据流与核心GameObject
Azure Kinect Unity Plugin通常会提供几个预制的组件(脚本)和示例场景。核心的数据流是这样的:
Kinect设备 -> Kinect管理器脚本 -> 骨骼数据/纹理数据 -> 可视化脚本/应用逻辑脚本
在Unity中,我们通常会创建以下结构的GameObject:
- KinectManager:这是一个单例脚本,负责初始化Kinect设备、管理生命周期(打开、关闭)、以及提供访问深度、彩色、骨骼数据的接口。它应该是场景中第一个被初始化的对象。
- BodySourceManager:这个脚本附着在KinectManager或一个独立的空物体上,专门用于从KinectManager获取原始的骨骼数据,并将其转换为一个更易用的数据结构(例如,一个包含所有追踪到的人体及其关节点的列表)。
- 可视化对象:
- 彩色/深度图像渲染:可以使用RawImage UI组件来显示Kinect捕捉到的彩色摄像头画面,这对于调试视角和位置非常有用。
- 骨骼点渲染:这是关键。我们需要在3D空间中,用小球(Sphere)或立方体(Cube)来实时表示追踪到的关节点的位置。通常会创建一个空物体“SkeletonRenderer”,然后为其添加一个脚本,这个脚本从BodySourceManager获取数据,并为每个关节点动态生成或更新一个GameObject的位置。
- 虚拟角色(Avatar):我们的最终控制目标。可以是一个简单的人形模型,也可以是一个卡通角色。我们需要将Kinect追踪到的骨骼数据,映射到这个虚拟角色的骨骼上。
3.2 搭建基础演示场景
让我们一步步搭建:
- 在场景中创建一个空GameObject,重命名为“KinectSetup”。将插件提供的“KinectManager”脚本拖拽给它。
- 在“KinectSetup”下创建一个子空物体,重命名为“BodySource”。将插件提供的“BodySourceManager”脚本拖拽给它。
- 创建骨骼可视化:
- 在场景中创建另一个空GameObject,命名为“SkeletonView”。
- 为其创建一个新的C#脚本,例如
SkeletonVisualizer.cs。这个脚本的核心是在Update函数中,从BodySourceManager获取当前帧的所有人体数据,然后为每个人体的每个关节点(Azure Kinect提供32个关节点)在对应3D位置实例化或更新一个小球。为了性能,我们通常会在Start函数中预先创建好32个小球(作为预制体),然后在每帧更新它们的位置。
- 创建虚拟角色:
- 从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。
步骤:
- 坐标系统一:Kinect返回的关节位置是基于其自身相机坐标系的(单位是毫米)。Unity使用的是米制左手坐标系。首先需要进行单位换算(除以1000)和可能的坐标系轴向转换(例如,Kinect的Y轴向上,Unity通常也是Y轴向上,但Z轴方向可能相反)。插件通常已经封装了这个转换,但你需要确认转换后的数据是否与你的场景匹配。
- 建立映射关系:在驱动脚本中,定义一个字典或数组,将Kinect的32个关节索引(如
JointType.HandRight)与你虚拟角色中对应GameObject的Transform组件关联起来。 - 每帧更新:在
Update或LateUpdate函数中,从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组件应用到这个姿势上,驱动角色。
步骤:
- 配置Avatar:确保你的“PlayerAvatar”模型已正确配置Humanoid Avatar,并且
Animator组件引用了这个Avatar。 - 创建动画控制器:虽然我们是实时驱动,但仍需要一个Animator Controller。可以创建一个空的控制器,并确保角色的默认状态是一个空的、不播放任何剪辑的状态。
- 编写驱动脚本:核心是修改角色的
HumanPose。Unity提供了HumanPoseHandler类来高效地读取和写入人形骨骼的姿势。- 首先,根据角色的Avatar创建一个
HumanPoseHandler实例。 - 在每一帧,创建一个新的
HumanPose结构体。 - 将Kinect关节的旋转数据(而不仅仅是位置)计算出来,并转换为Unity的
Quaternion,然后填入HumanPose的muscles数组。这是最复杂的一步,因为需要将Kinect的32个关节旋转映射到Unity Humanoid的30多个肌肉(Muscle)定义上。通常需要建立一个映射表,并处理坐标系转换。 - 最后,使用
HumanPoseHandler.SetHumanPose()将计算好的姿势应用到角色上。
- 首先,根据角色的Avatar创建一个
// 伪代码示例 - 概念性更强 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 场景布置与设置
- 环境:创建一个简单的平面作为地面,放置你的“PlayerAvatar”角色。
- 交互道具:在角色前方创建一个球体(Sphere)作为可交互的物体,为其添加刚体(Rigidbody)组件,并取消勾选“Use Gravity”,让它先悬浮在空中。再创建几个立方体作为目标靶子,摆放在远处。
- UI反馈:创建一个Canvas,添加一个Text组件,用于显示当前手势状态或得分。
5.2 手势识别逻辑实现
我们将实现一个“推手”发射球体的手势:当用户快速将右手向前推动时,虚拟角色也做出推手动作,并给球体一个力。
- 创建手势识别脚本:新建一个C#脚本,例如
GestureRecognizer.cs,将其挂载在角色或一个管理物体上。 - 定义手势状态:我们需要追踪右手关节(
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 } } - 关联与触发:在
OnPushGestureDetected方法中,获取场景中球体的Rigidbody组件,并调用AddForce方法,施加一个向前的力。同时,可以更新UI文本,显示“发射!”。
5.3 添加视觉与音频反馈
为了提升体验,我们需要反馈:
- 视觉:当手势被识别时,让角色右手短暂发光(通过修改材质或添加粒子效果),或者让目标被击中时爆炸(使用粒子系统)。
- 音频:添加AudioSource组件,在发射和击中时播放相应的音效。
运行项目,站在Kinect前,尝试快速向前推动你的右手。你应该能看到角色同步动作,球体被发射出去,击中目标并产生效果。一个最基础的体感交互Demo就完成了。
6. 性能优化与调试技巧
体感应用是实时性的,性能至关重要。同时,开发过程中会遇到各种问题,这里分享一些实战经验。
6.1 性能优化要点
- 降低骨骼追踪分辨率:在
KinectManager或Body Tracking初始化时,可以设置较低的分辨率(如K4A_DEPTH_MODE_NFOV_UNBINNED)和只追踪较少的人体(默认是7,可以设为2),能显著降低计算负载。 - 控制更新频率:不是每一帧Unity都需要更新骨骼数据。如果应用对实时性要求不是极端高,可以每2帧或3帧更新一次骨骼数据(在驱动脚本中使用计数器控制),能节省大量CPU时间。
- 简化骨骼可视化:在调试阶段后,关掉用于显示骨骼点的小球渲染器(
MeshRenderer),或者使用更简单的图形(如GL.Lines)来绘制线条骨骼,这比渲染几十个3D小球要高效得多。 - 使用对象池:对于动态生成的骨骼点小球或特效,使用对象池技术复用GameObject,避免频繁的
Instantiate和Destroy调用。 - 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 扩展你的体感应用
- 更多手势:实现“抓取”(判断手是否握拳)、“挥手”(手在水平方向快速移动)、“缩放”(双手距离变化)等手势。核心思路都是持续追踪特定关节的位置、速度、角度或相对关系,并定义状态机来识别。
- 多人交互:Azure Kinect最多可同时追踪7个人体。修改你的驱动脚本,为每个追踪到的人体实例化一个对应的虚拟角色,可以实现有趣的多人互动场景。
- 与环境交互:结合深度数据。除了骨骼,Kinect还能提供深度点云。你可以用深度数据实现虚拟碰撞,比如当用户的手(通过骨骼位置估算)在深度图像中对应位置的距离小于某个阈值时,触发“触摸”虚拟物体的效果。
- 融合其他输入:将体感与语音识别(如Unity的UnityEngine.Windows.Speech命名空间)结合,实现“语音+手势”的复合交互。
- 部署到其他平台:Unity项目可以轻松打包为Windows可执行文件、UWP应用(部署到HoloLens 2)等。注意,部署到HoloLens时,需要处理ARM64架构的库依赖和UWP平台的API限制。
7.2 附赠资源包内容与使用
本教程配套的资源包“KinectInteractionStarterPack.unitypackage”包含了以下内容,旨在帮你快速起步并解决常见难题:
- 预配置的场景:一个已经搭建好KinectManager、BodySourceManager和简单骨骼可视化场景的
.unity文件,导入即用。 - 稳定的人形角色驱动脚本:提供了一套经过校准的
MecanimKinectDriver脚本及其辅助工具类,包含了从Azure Kinect 32关节到Unity Humanoid肌肉的映射表。你只需要将脚本拖到你的Avatar上,并指定BodySourceManager引用,大部分情况下就能获得可用的驱动效果。 - 常用手势识别示例:包含了“推手”、“挥手”、“举手”三个手势的识别脚本,并有详细的注释说明参数含义。
- 性能优化工具:一个简单的帧率显示器和骨骼数据更新频率控制器脚本。
- 调试材质与预制体:用于骨骼点可视化的低面数小球预制体,以及画骨骼线的调试材质。
使用步骤:
- 创建一个新的或打开你的Unity项目。
- 菜单栏选择
Assets -> Import Package -> Custom Package,选择下载的.unitypackage文件。 - 在导入对话框中,建议全选所有文件,点击“Import”。
- 导入后,在Project窗口的
_KinectStarterPack/Scenes文件夹下打开示例场景。 - 将你的Avatar模型拖入场景,移除它自带的Animator组件(如果有),然后从
_KinectStarterPack/Scripts文件夹将MecanimKinectDriver脚本拖到Avatar上。 - 在Inspector面板中,将场景中已有的
BodySourceManager对象拖拽到脚本的对应字段。 - 运行场景,你的角色就应该能跟随你的动作了。
资源包中的代码都有较为详细的注释,你可以根据自己的需求进行修改和扩展。记住,体感交互的核心是稳定、低延迟的数据和直观、有趣的反馈,多测试、多调整参数,才能打磨出最好的用户体验。