Leap Motion 之Unity 开发指南(一. 基本概念与制作手预制件)
LeapMotion 之Unity开发指南(1.基本概念和手的预制件) 【叙言】 最近用Leap Motion + 国产的3Glass眼镜构建了房地产、数字矿山的1些利用,感觉这是很经济的1个VR架构方案,比用Oculus和HTC的硬件要省钱很多,并且效果也不错。 在行业VR利用中,其实重在培训教育、生产安全的仿真演练上,更多地通过1些UI互动、基础性的手势(比如开关装备、拾起灭火设备等)来进行交互,这些其实不1定需要非常昂贵的激光定位装备、复杂的硬件套件才可实现,而手势辨认在未来也是1个趋势。 所以将1些开发积累整理下来,希望不断地能在这个领域中学习领会,终究能为行业客户创造1些实用的价值。 欢迎大家和我1起交换,QQ:115913892
1. 安装 1. 打开官网:https://developer.leapmotion.com/get-started 2. 先要下载和安装LeapMotion的驱动程序
注:我买的是2代Leap Motion,所以在Win10下 不支持V2 Desktop的开发驱动,选择左面的。(注意是开发驱动,而非App利用)
我下载的最新版本是3.1.2,解压后以下图。
运行EXE文件,根据提示安装驱动,实际上这将安装了1个驻留程序在系统托盘中,并且生成1个自动启动的系统服务Leap Service,在控制面板中可查看它,当遇到Leap Motion不工作,或托盘中图标显示黑色时,可检查1下这个服务是不是正常。 驱动程序与LeapService通讯,读取硬件层面3D摄像头跟踪的手势数据,上层类的利用(如Unity,虚幻4,Java等)则与驱动程序(C++写成)通讯。 安装成功后,能看到LeapMotion两个摄像头和中间LED灯都正常亮起,表明处于工作状态,这时候可用自动安装的Leap App Home利用来测试1下,通过它还可下载1些官方的例子。 3. 下载准备好各类Unity包 到https://developer.leapmotion.com/unity下载所需的包。
其中CoreAssert是核心包,其他都是封装好的各类功能包,在实战篇中会介绍。 2. 基本概念 1. 坐标系统 Unity使用左手坐标,LeapMotion使用右手坐标(所以,Z轴是相反的)。 Unity以米为单位,LeapMotion使用毫米。LeapMotion配备的Plugin脚本内部对坐标系统进行了转化,行将单位和坐标转化为Unity的标准。
注意:在Unity中,1定要从LeapServiceProvider中取得Frame对象,否则在帧中的数据(TrackingData)将还使用Leap的坐标系统。LeapServiceProvider解析了Scaling,Rotation,Translation的变换. 2. 手势跟踪 LeapMotion使用了光学传感器和红外光组件。传感器的FOV为150度。顶部0.03~0.06米为有效的跟踪范围。
最好的工作环境是可产生清晰的、高对照度对象轮廓的光照环境。 HMD模式下(头盔绑定的模式 ),跟踪算法被优化成对不同的视角下辨认手势(大概的意思多是,你头盔多动动,辨认得更好1些),比放在桌面固定不动要更好1些。
3. 手(Hand Assert) (1)表示方法 在预制件目录下,分成图形(图元)和物理两组脚本和预制件,可以用其中各1来组合表示手。这1处1定要理解,官方的Unity包里给了1些场景例子,可以研习1下。 从概念上手被辨别成Graphic和Physic两种组件构成,前1即是图元,主要是显现手的外观,后1主要表现手的物理特性(如刚体、碰撞)。 也能够没有物理组件,这样就不能产生物理特点了。 (2)创建手的方法 有几种创建手的方法:
(3)1个例子 下图是1个典型的手的例子,1个HandController下挂4个子对象,分别是图元左右手,物理左右手。
3. 创建你自己的手Prefab 注:随着官方例子创建1个手,可能其实不是很实用,但有助于理解手的预制件和原理组成。 你可以创建类似于已提供的Unity包里的手预制件,用你自己的图形来表示手,同时定制自己的手的行动(基于已提供好的代码)。 我们要创建的这类手称为“离散手预制件Discrete Hand Prefabs”,意思是手上每一个部位都是单独的Game Object,都有其单独的位置和方向信息。在Core assert 包里,机器人的手即是这样的“离散预制件”。下面介绍了通过使用Unity自带的几何体(圆柱、圆)来创建Prefab。
首先,我们需要创建1个手指的Prefab,并且使用它来创建手Prefab。 创建手指Prefab1. 创建1个场景. 2. 新建1个空对象,命名KnobbyFinger 3. 创建骨头
4. 创建关节
6. 增加SkeletalFinger 脚本组件到KnobbyFinger 7. 拖动每一个关节和骨头到脚本中的相应变量处。
8. 将KonbbyFinger做成预制件。 创建手Prefab(创建好手指Prefab后) 1. 创建空对象,取名KnobbyHand. 2. 增加SkeletalHand 脚本到 KnobbyHand. 3. 脚本变量Handedness设置成“Either.” (如果你的手是不对称的,设置成 “Right” or “Left”.) 4. 拖动5个KnobbyFinger Prefab得手中,命名为:Thumb,Index,Middle,Ring,and Pinky. 5. 对每一个手指,设置Finger类型为相对应的类型(SkelatalFinger脚本组件中)。 6. 拖动手指到KnobbyHand 的SkeletalHand 脚本中相应的Fingers变量上.
7. 拇指是特殊的,没有Metacarpal. 因此,编辑Thumb,在bone数组中移除bone( element 0 ) . 删除Metacarpal子对象. 8. 增加手掌Add the palm:
9. 增加手段:
10. 增加胳膊
12. 将KnobbyHand创建为prefab. KnobbyHand的结构应为下图所示:
测试你的手1. 新建1个LeapHandController prefab到场景中,以便交互区域是在摄影机的FOV内。 2. 设置以下层次结构
3. 在LeapHandController的HandPool中设置: . 4. 运行关卡,视察你的手 如果RigidHand组件在Scene窗口中可见,但抖动或反弹,确保你移除图元手部位的所有碰撞体。 如果手指堆叠或移动在1个手指的控制下,检查手指SkeletalFinger 脚本的手指类型设置。 如果你的手混杂成1大团的乱糟糟模样,那是每一个子元的Scale设置的太大了,记得Unity的单位是1米,1个典型的手宽度是8.5厘米(或表示成Unity transform的Scale是0.085)。如果想使手更大1些(在游戏里看),增大LeapHandController的Scale. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |