在本文中,我将使用英特尔® 实感™ 软件开发套件 (SDK) 中的手部追踪算法来控制 Unity* 3D 第一人称控制器 (FPC) 的位置和 LookAt。 场景主摄像头依然是含有默认 FPC 的场景的标准配置。 然后在屏幕的左下角和右下角分别添加第二个和第三个摄像头,以显示可反映用户左右手活动的光晕型 Unity 3D 资产(由英特尔实感 3D 摄像头解析)。 这种解析然后会连接至控制 FPC 位置和定向的默认位置和 LookAt 脚本。
本系列共有三篇文章,在第一篇文章中,我首先安装 UnityPro 和英特尔实感 SDK 以进行环境设置,并将英特尔实感 3D 摄像头插入 Lenovo Ultrabook™ 设备(采用英特尔® 酷睿™ i5 处理器)的 USB3.0 端口。 为使自己熟悉这种开发环境,我了解了英特尔实感 SDK 提供的示例,双击英特尔实感 SDK 2014 测试版桌面图表,打开 Windows* File Explorer。 文件位于 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Intel® RealSense™ SDK 2014。 在该目录中,我右击 Intel RealSense SDK Sample Browser 文件,然后点击 Run as Administrator,启动演示应用 Sample Browser 的界面。
Sample Browser 的左边是 Unity Toolkit 选项卡。 这种与英特尔实感技术连接的界面可提供 Unity Editor 菜单以及英特尔实感技术要素的配置界面,具体方法是从 C:\program files\Intel\RSSDK\framework\Unity\RSUnityToolkit.unitypackage 导入英特尔实感 SDK 的资产包。 这样,Unity Editor 顶部菜单栏会出现RealSense Unity Toolkit 菜单。 尽管我在文中使用 Unity Toolkit 界面,Sample Browser 举例说明了如何借助 C#、C++、JavaScript*,以及没有 Toolkit 界面的 Unity 实施英特尔实感 SDK。 关于如何使用没有 Toolkit 界面的 Unity,请参阅 CubeSense 示例中的 SenseInput 脚本。 C# 脚本 SenseInput 展示了如何直接访问英特尔实感技术 SDK。
点击 Unity Toolkit 选项卡后,Sample Browser 右侧显示了各类不同的示例。 为使用本文的英特尔实感 SDK 开发 FPC 示例,我广泛参考了示例 1: 平移:使用抓取手势在可打破场景的其他 3D 几何体的球体之上启动平移控制。 由于缺乏随附于场景平移球体的自定义脚本,我一开始感到非常困惑,但后来发现平移球体可通过平移活动、启用行为和禁用行为进行配置(Unity Editor RealSense Unity Toolkit 菜单中均可提供)。 这些组件均拥有直观的菜单选项,可对手势进行配置以激活这些动作和行为。
配置 Unity* 3D 场景
完成初始配置和熟悉 Sample Browser 后,我借助基础几何与 FPC 创建了 Unity 3D 场景。 在该场景中,我使用键盘控制 FPC 的位置;使用鼠标控制 FPC 的旋转和 LookAt。
为使默认 FPC 适用于英特尔实感技术控制,我增加了部分资产,以将手势数据中继至场景。 在场景的最底部(主摄像头视线外),我增加了两个空白游戏对象,以分别固定用户左右手位置的位置矢量。 我为各空白游戏对象加入了光晕效果,以加强可视性。
然后我为手部增加了正交摄像头,以查看各光晕的位置矢量固定器。 每个光晕型空白游戏对象均在各自正交摄像头的视野范围内,使深度 = 1(如果深度 = 0,则为场景的主摄像头)。 固定左手位置的空白游戏对象为绿色光晕;我将其放在屏幕的左下方,具体方法为:将摄像头的Viewport Rect 值设为 X = 0、W = 0.25、Y = 0、H = 0.25。 固定右手位置的空白游戏对象为红色光晕;我将其放在屏幕的右下方,具体方法为:将摄像头的 Viewport Rect 值设为 X = 0.75、W = 0.25、Y = 0、H = 0.25。
最后,我另外增加两个空白游戏对象,用来固定左右手的非活跃与活跃状态。 结合使用这些虚拟资产与 FPC MouseLook 和 FPSInputController 脚本,可在用户的手部离开英特尔实感 3D 摄像头的视线范围时根据需要重设和停用手部追踪/ FPC。 期待的效果主要针对 FPC 的位置或 LookAt,如果各控制手部离开摄像头的视线范围,将变成闲置状态。 图 1 所示为 Unity Editor 的资产。