位置: 编程技术 - 正文

Leap Motion Using Unity3D——环岛跑车篇

编辑:rootadmin
Leap Motion Using Unity3D——环岛跑车篇 一. Leap Motion简介 Leap Motion作为一款体感传感器,通过立体视觉捕捉红外图像信息并产生手掌在三维空间中的相关信息。下面会结合示例来说明Leap Motion采集的模型数据在跑车游戏中的应用。翻译来自Pierre Semaan的博客“Leap Enabling the Unity3D Car Tutorial”,然后对有关联的代码和操作注意事项加以说明。二. 软件要求1. Unity3D 官方给的选择为Unity 5 Pro或者Unity 5 Free,不过笔者用的是Unity 4.6;2. 跑车教程 在Unity3D的资源商店中搜索”Car Tutorial“,然后在Unity3D中免费下载并导入资源即可;3. Leap SDK 在Leap Motion的官网上下载最新版本的SDK。如果下载不了或者回到前一个界面,可以尝试换浏览器下载。4. Leap Motion输入脚本 选用Pierre Semaan提供的pxLeapInput.cs。三. 操作步骤1. 创建新的工程 新建Unity3D工程时,导入Car Tutorial.unitypackage包。2. 确保CompleteScene场景正常工作 CompleteScene场景存放在Scenes文件夹下,双击打开场景后可以俯视看到环形跑道。不过由于Unity 3版本的跑车游戏转到Unity 5后提示shader有问题,于是岛外的背景颜色看起来有些违和。运行游戏,按上下左右键可以控制跑车则说明游戏正常。3. 复制CompleteSceneCompleteScene复制后重命名为LeapCompleteScene,这样可以备份源文件并开始大胆地实验。4. 在Assets目录下创建Plugins文件夹5. 复制Leap文件至Plugins文件夹和游戏文件的根目录下复制Leap.dll和LeapCSharp.dll至游戏文件夹的根目录下,注意两个文件是有不同操作系统的版本。然后复制LeapCSharp.NET3.5.dll至Plugins文件夹下。6. 复制LeapUnityExtensions.cs至Plugins文件夹 下载LeapUnityExtensions.cs然后复制进Plugins文件夹。7. 复制pxsLeapInput.cs至Plugins文件夹 下载pxsLeapinput.cs文件并复制到Plugins文件夹。脚本必须在Plugins文件夹下因为后面我们需要在javascript脚本中参考它,并且它需要先编译这样javascript引擎才能看见它。a)(可选)检查pxsLeapInput.cs脚本 它是一个单例并且包含易于从最近的Update中获取图像帧和手的属性。关键函数为GetHandAxisPrivate: pxLeapInput被定义为一个静态类;定义了一个Leap名称空间中的空Controller对象m_Controller,空Frame对象m_Frame和空Hand对象m_Hand。 构造函数中用new创建了一个Controller对象,如果创建失败,则返回Errors字符串提示。 定义Frame函数返回m_Frame,定义Hand函数返回m_Hand。 在Update函数中,首先判断m_Controller是否创建成功,如果创建成功,则将当前帧传给上一帧(这句没起作用),用Frame函数返回当前帧m_Frame;如果当前帧不为空,则说明检测到手,将当前帧的类中的Hands数组中索引为0的部分赋&#;给m_Hand(说明只是用到单手控制)。 在GetHandAxisPrivate函数中,函数输入包括轴的名称axisName(字符串)和缩放标志位scaled(布尔型)。首先调用Update函数获取当前帧和当前帧中索引为0的手;如果布尔型变量scaled&#;为真,则掌心位置使用ToUnityTranslated函数获取,掌心方向量和掌心方向用ToUnity函数获取,否则掌心位置用ToUnity获取。(1)如果轴名称为”水平“,则返回掌心位置的x轴&#;;(2)如果轴名称为”垂直“,则返回掌心位置的y轴&#;;(3)如果轴名称为”深度“,则返回掌心位置的z轴&#;;(4)如果轴名称为”旋转“,则返回掌心法向量的x轴&#;的-2倍;(5)如果轴名称为”倾斜“,则返回掌心法向量的z轴&#;;(6)如果轴名称为”水平方向“,则返回掌心方向的x轴&#;;(7)如果轴名称为”垂直方向“,则返回掌心方向的y轴&#;。 如果scaled为真,将轴&#;截断至-1到1之间。8. 在Car.js中调用pxsLeapInput GetHandAxis函数调用GetHandAxisPrivate函数时,scaled&#;置为真,所以返回&#;为1且掌心位置调用ToUnityTranslated函数。为了用Leap Motion输入覆盖键盘输入,需要在GetInput函数中修改。 和GetAxis类&#;,GetHandAxis的返回&#;变化范围为[-1,1]。同时为了避免直接覆盖键盘控制,添加LeapEnabled标志位选择Leap Motion输入是否使能。为了调整前进速度,添加forwardScale变量避免跑车加减速过快或过慢带来的不适。9. 使能Leap Motion输入 scaled变量创建时默认&#;为假,所以需要将Car物体右侧对应的脚本Car.js下的公有变量scaled打勾(置为真)。运行游戏即可用Leap Motion控制游戏。游戏操作的正确方式为:手心和手背以手臂为轴逆时针旋转为左转,反之顺时针旋转为右转,旋转时的静态角度代表跑车转动的幅&#;。手掌置于Leap Motion前方则第一视角与车头前进的方向相同,反之置于后方则第一视角与车头前进的方向相反(车尾前进,车体后退)。. Leap Motion输入介绍 为了更好地用Leap Motion控制游戏,至少要知道我们用什么样的手势运动替换掉了水平轴和垂直轴的输入。所以,下面简单介绍用到的帧和手的数据结构以及手的数据结构对应的手的属性。(1)数&#;单位 距离:毫米;时间:毫秒;速度:毫米/秒;角度:弧度。(2)帧 帧的基本实体包括Hand,fingers和tools。controller.frame()获取当前帧;controller.frame(n)获取上n帧;frame.id()获取当前帧的整数型ID;Leap::Listener类中检测新帧到来的回调函数为onFrame(controller);frame.hand(id),frame.finger(id)和frame.tool(id)为获取当前ID的手,手指和工具数据。(3)手 获取手的方向时也用到x,y和z轴坐标,虽然经过ToUnity函数的转换(不清楚什么意思),但是我猜得到的还是roll,pitch和yaw&#;。不过用到手的方向时还是调用官方提供的roll(),pitch()和yaw()比较妥。手掌和手指的位置是相对于Leap Motion中心的全局坐标系的位置,每个地方有不同的RPY方向。有时虽然调用的函数相同,但继承函数所在的基类的对象不同,比如direction函数。P.S.下图为C&#;&#;中的函数,仅供说明使用。结语 本篇主要描述如果用Leap Motion的输入来替换键盘的方向键,并没有深入Unity3D生成的游戏的代码,不过应该很多人会比笔者更了解Unity3D。鼠标和键盘对于二维平面操作要优于Leap Motion,因为Leap Motion在控制时很难令其中一维坐标保持不变,对于手来说很容易疲惫;而且二维操作在空中显然费力不讨好;但是对于三维平面操作,鼠标和键盘一定要结合起来用才行,Leap Motion只是提供了一种更加自然的操作方式。所以,在虚拟环境中绘制手模型,并以人&#;为反馈作三维空间操作是可选的比较合理又自然的交互方式。

推荐整理分享Leap Motion Using Unity3D——环岛跑车篇,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Leap Motion Using Unity3D——环岛跑车篇

版权声明:本文为博主原创文章,未经博主允许不得转载。

unity Toggle Groud Toggle框要建一个空物体加上ToggleGroud组件,然后把Toggle按钮的组选成该Groud。版权声明:本文为博主原创文章,未经博主允许不得转载。

Access to the path "LibraryUnityAssembliesUnityEngine.xml" is denied. 这个问题基本上是重新打开UnityEditor,导入工程的时候VisualStudio还开着导致的。解决方法是关掉VisualStudio,再重新打开。版权声明:本文为博主原创文章

NGUI长按事件 privatefloat_longClickDuration=2f;float_lastPress=-1f;voidOnPress(boolpressed){if(pressed)_lastPress=Time.realtimeSinceStartup;else{if(Time.realtimeSinceStartup-_lastPress_longClickDuration)DoLongPres

标签: Leap Motion Using Unity3D——环岛跑车篇

本文链接地址:https://www.jiuchutong.com/biancheng/369193.html 转载请保留说明!

上一篇:unity 加载c++ dll文件提示DllNotFoundException的解决办法(unity 加载文件 卡顿)

下一篇:unity Toggle Groud

  • 企业所得税年度汇算
  • 企业为自然人什么意思
  • 税务罚款如何做会计分录
  • 非正常损失的货物,增值税做什么科目
  • 一般纳税人结转增值税的账务处理
  • 销项税额和进项税额发票怎么区别
  • 库存商品属于资产类会计科目吗
  • 商品报废了还用退货吗
  • 出口退税退的是哪部分税
  • 土地增值税清算时间
  • 营改增后书据转移印花税是含税的吗?
  • 增值税普通发票和电子普通发票的区别
  • 建筑也增值税
  • 金税三期房产税源信息更改后
  • 电商一般纳税人如何报税
  • 技术服务费发票需要备注吗
  • 企业购买汽车需要缴纳什么税
  • 应付账款做保理账务怎么处理
  • 科研机构进口直接用于科学研究的仪器免征增值税吗
  • 员工辞退补偿金发放逾期
  • 本月的应收账款,实际到下个月了会怎么样
  • macos monterey怎么降级
  • 进项税年末需要结转么
  • u盘重装系统电脑
  • 红字发票只能一张一张开吗
  • 营改增全面推开为什么还叫试点
  • adblock规则编写
  • linux操作系统安装包
  • 罚款计入营业外支出影响当期损益
  • 带息应收票据会计处理,到期
  • php设计原则
  • php自定义header
  • php批量上传
  • 残疾人保障金是什么科目
  • php jsondecode
  • 讲讲vue3下会造成响应式丢失的情况
  • python中有很多包管理工具
  • 定额发票和增值税发票
  • 股东之间股权转让需要股东会决议吗
  • 投资收益的核算依据
  • 会计中财务费用为负
  • 安全生产责任险是强制险吗
  • 记账和结账可以一起用吗
  • 银行日记账错误更正案例
  • MySQL Proxy的安装及基本命令使用教程
  • 专票作废扣税吗
  • 子公司再设立子公司
  • SQL Server 2000向SQL Server 2008 R2推送数据图文教程
  • 关于增值税调整的补充协议
  • 个税征税对象包括哪些
  • 其他应付款结转收入的条件
  • 缴纳增值税账务
  • 企业录用失业人员补贴
  • 经营活动产生的现金净流量怎么算
  • 专用发票与普通发票图片
  • 应付账款怎么做平
  • 如何修改sqlserver中sa用户的密码
  • bios1962错误
  • windowsold文件夹在哪里
  • 电脑安装win8系统
  • win10 build 21277
  • win7桌面图标无法拖到任务栏
  • win7系统如何设置息屏
  • centos6启动服务的命令
  • 微软正式推出wind...
  • Win7旗舰版64位如何关闭电脑触摸屏功能的方法
  • win10系统异常自动重启
  • vb6.0win10安装教程
  • win10如何进行运行
  • mac sip怎么打开
  • opengl缓冲区
  • node.js使用mysql
  • js对象用法
  • 如何搭建python项目架构
  • 使用灭火器人要站在上风口还是下风口
  • python 断言详细讲解用法及其案例
  • 个体 税务登记
  • 河南省地方税务局房产税管理办法
  • 怎么注册用户名短的淘宝账号
  • 小规模纳税人税费怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设