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实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件