unity体感游戏--Kinect与Unity结合开发

2024-02-19 21:08

本文主要是介绍unity体感游戏--Kinect与Unity结合开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以下所有的代码操作的要求均建立在官方的KinectSDK1.5的基础上(除DEMO版,1.0的也通用,至于有些用OPEN NI的,我的方法应该有些辅助作用)

一.全屏:

思路:

Kinect的手的节点(这里都是右手,左手的效果一致)在Unity中移动的距离是很小的,你可以用一个物体绑定到手上,然后就能看到具体能够移动多大的范围了。

正式开始:1.因为手的移动范围很小,因此建立一个虚拟的小屏(2D,屏幕坐标),长宽就是你手上下左右移动的最大距离(在Unity中)。

2.换算出虚拟小屏的X/Y轴与实际屏幕的X/Y轴的比例,可以保存可以不保存,这个自己记住就成大小无所谓,甚至可以考虑相应的稍微减少一点值,以方便比你更加瘦小的人使用到全屏功能。但请记住,这个虚拟小屏是固定的不会移动的,要移动的是实际操作的人。

3.将手的世界坐标利用Camera.WorldToScreenPoint(手的Position位置)换算出屏幕坐标点,并保存好Z轴的值。

4.算出手的屏幕坐标与虚拟小屏X/Y轴的比例,然后利用第2步中得到的虚拟屏幕与实际屏幕的比例,可以得到一个虚拟的扩大后的手的屏幕坐标。(具体算法请自己考虑。)

5.利用第5步算出的X/Y轴的值,加上第3步得到的Z轴的值,通过Camera.ScreenToWorldPoint()方法得到在Unity中的世界坐标的Position值(这个值是虚拟出来的)

6.将第5步取得的Position值实时的赋给某个作为鼠标的物体的transform.position.

利用以上6步就能做到鼠标物体全屏移动了。

二。防抖:

因为通过Kinect取得的手的坐标点是在不断的抖动的,因此,如果你仅仅是利用“一”中的思路去做,可能看到的效果是手在不停的抖动的。因此我们需要防抖。

思路:1不断的去算鼠标物体(以后用鼠标代替)与“一”中得到的虚拟实际坐标的距离

2.利用Mathf.Lerp来不断的改变鼠标的Position的值。

3.提示,可以自己设定一个数值变换的速度,然后考虑将距离融入到速度中去。。。

其实上就是将“全屏”的第6步换成上面的1+2两步。。

三。模拟鼠标点击:

要利用Kinect去模拟鼠标点击的功能,必须要使用一个物体作为屏幕中的鼠标代替实际的物理鼠标。然后利用上面的:全屏+防抖方法使Kinect能够控制鼠标物体满屏移动。

因为是利用物体模拟的鼠标,所以了,OnMouseDown肯定是没用的啦。所以要利用到了OnTriggerEnter()和OnTriggerExit()方法了。

为了确保鼠标能够点击到按钮,那么就需要将按钮的Collider范围扩大,并且最好能够保持鼠标和按钮处在同一平面或者相互平行的平面,且鼠标与摄像机的相对距离要比按钮与摄像机的相对距离小(若要如此设定,那么在"全屏”中的第6步中,改变的将仅仅是X/Y的值,Z的值用鼠标的原始值;同理,在“防抖”中第2步改变的值也只是X/Y轴的值,Z轴用原始的鼠标物体的值。)。

重点建议:如果要保证鼠标始终在屏幕内,那么最好是用一个正交摄像机去单独渲染鼠标物体和所有的按钮。那么以上的所有的计算用到的摄像机类(Camera)都是这次设定的正交摄像机了。

1.若要Unity+Kinect结合进行开发,建议访问 http://wiki.etc.cmu.edu/unity3d/index.php/Microsoft_Kinect_-_Microsoft_SDK 以及http://channel9.msdn.com/coding4fun/kinect/KinectSDK--Unity3D-Interface-v5-now-Kinect-for-Windows-SDK-v1-compatible 这两个网址都是介绍如何使用Windos的SDK与Unity结合进行开发的教程。当然,都是英文版,第一个会比较详细一点。第二个只是简单的进行了介绍。但是两个都有具体的Unity项目进行下载。

2.开发Unity与Kinect结合的项目,不需要购买Kinect Sensor for Windows(坛子里有人问到了这个问题) 千万不要被奸商给坑了。根本不需要的,至于为什么,看1里面提到的两个网站的教程就知道了。

附加一个问题:我现在开发的项目在编辑器里面能够正常执行,但是导出成EXE之后却不能用了,不知道是为什么?我使用的是微软官方的最新SDK版本。如有童鞋知道,请告知,万分感谢。

=====================================================================

最近公司主攻Unity+Kinect开发,需要用到很多的Kinect的动作并绑定到Unity中进行操作。

在开发过程中遇到以下几件小事,可能大家以后开发的时候也需要注意的。

1.人物骨骼绑定之后的,在Unity界面中默认手是不可能完全划到整块屏幕的。所以需要在Unity中添加一定的算法确保双手能够划到整块屏幕。

2.由于是通过Kinect进行操作,那么OnMouse****之类的方法肯定是用不了的啦。我利用的是发射线,但是这很明显是个愚蠢的做法。而且很多时候射线出发会出现很多的问题。

3.不同版本的Kinect SDK包是不能通用的(针对微软官方的SDK),并且非常坑爹是高版本也不兼容低版本?不知道是我同事的脚本写法有问题还是怎样。我个人还未研究Kinect的开发。

4.Kinect的坐标系统和Unity的坐标系统都是笛卡尔坐标系,但有一点区别是Kinect与Unity的Z轴是反向的。X/Y轴一致。

5.若需要将手与摄像头进行位置/角度绑定,那么必须要添加一个脚本,确保手的在某个范围内时返回一个固定值。若非如此,你会发现摄像头会像抽风了一样的抖动,原因是Kinect检测到的人物手的坐标是不停变换的,即使你感觉你的手没有动。

这篇关于unity体感游戏--Kinect与Unity结合开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725974

相关文章

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE