LeapMotion 之Unity开发指南(二. 开发架构和SDK)
一. Leap Motion开发架构
在Windows下,LeapMotion软件是作为一个后台服务在运行(在ControlPanel中可检视),在Mac和Linux下则是一个驻留程序在运行,都通过USB总线与硬件控制层通信。上层的App应用则与这个服务(或驻留程序)通讯,获得手势跟踪数据。
Leap Motion SDK提供了两种类型的API获得手势数据,一种是本地接口方式;一种是WebSocket接口方式,因而我们可用使用多种语言(包括JavaScript)开发应用。
1. 本地接口
即:动态库方式,可以直接在C++或Object-C中调用,或通过Java,C#,Python的封装库来调用。应用可以设计成前台与后台两种方式。
2. WebSocket接口
以WebSocket Server运行于localhost的端口6437。跟踪数据以JSON格式提供。JS库是leap.js
二.LeapMotion的SDK库
LeapMotion SDK包含了两种基本库,一种C++,一种C;之上再封装为C#和Object-C可调用的库。Java,Python则使用了一个开源工具SWIG对基本库进行封装和调用,对于JavaScript和Web应用开发,提供了WebSocket Server和JS库来实现调用。
各语言开发环境的要求:
· C++ on Windows: Visual Studio2008, 2010, 2012, and 2013
· C++ on Mac: Xcode 3.0+, clang3.0+, and gcc
· Objective-C: Mac OS 10.7+, Xcode4.2+ and clang 3.0+
· C# for .NET framework versions3.5+
· Mono version 2.10
· Unity Pro and Personal versions5.3+
· Java versions 6 and 7
· Python version 2.7.3
· UnrealEngine 4.9+
三.Unity 主要类介绍
1. Leap.Unity 命名空间下的类
此命名空间下的类负责与Unity的GameObject或组件交互,获取跟踪数据。
· LeapServiceProvider –
访问跟踪(手势轨迹)数据和图形,并与LeapController对象通信,转换轨迹数据为Unity的制式;同时将右手坐标转化为左手坐标。
· IHandModel,HandModel,或继承于它们的 类(如CapsuleHand)–
所有的手都基于这些接口和类,如果你创建自己的手,你必须实现IHandModel 或继承HandModel.
· LeapHandController –
负责与手的图元以及物理对象进行交互。
2. Leap命名空间leap Leap
Leap空间中的类定义了LeapMotion所跟踪的具体内容。
· Frame
帧是某个时间点的数据集合,一个帧包含了Hand对象。
· Hand
一个Hand手对象表示了一个跟踪的手,一个手总是包含5个手指以及相关属性如:Direction,PalmPosition,和Basis(orientation).
· Finger
一个Finger手指对象表示了追踪的手指。一个手指包含四个骨头。
· Bone
Bone骨头对象表示手指的一段,并包含位置、大小和方位数据。
· Arm
Arm胳膊对象是特殊的Bone,其实是跟踪了前臂。.
Leap命名空间下的脚本不是仅专属于Unity的,也可被任何C#程序调用。但在Unity中使用这些类有一些重要的区别:你必须从LeapProvider中获得Frame对象,而不是从Controller对象。LeapProvider将Leap Motion的坐标空间转为Unity的。如果你直接从Controller中获得帧,那么你必须自己处理这些转化。
LeapMotion和UnityAPI为向量和空间变换定义了各自的类,你可以从Leap Motion的类转为Unity等价的类,如下例所示。
Vector3 unityVector = leapVector.ToVector3();Quaternion unityRotation = leapMatrix.Rotation();Vector3 unityTranslation = leapMatrix.origin.ToVector3();Vector3 unityScale = new Vector3(leapMatrix.xBasis.Magnitude,leapMatrix.yBasis.Magnitude,leapMatrix.zBasis.Magnitude);