精华内容
下载资源
问答
  • 主要介绍了HTML5开发Kinect体感游戏的实例应用的相关资料,希望通过本文能够帮助到大家,需要的朋友可以参考下
  • Kinect_Game Python Kinect游戏Galaxy Legend项目
  • kinect游戏下载

    2019-01-19 00:14:00
    http://www.paopaoche.net/yx/tigancnyx/ http://play.163.com/17/1107/09/D2KM650O00318QE9.html 转载于:https://www.cnblogs.com/2008nmj/p/10290273.html
    展开全文
  • 利用kinect的肢体识别实现了识别人体基本动作
  • 最近需要学习Unity3D和Kinect交互进行开发。查阅网上的资料,一直没有找到详尽而又简单的方案。今天终于摸索出来在Unity3D中使用Kinect的方法,特此做个笔记。 一、Unity和Kinect交互的环境配置 我所使用的...

    最近需要学习Unity3D和Kinect交互进行开发。查阅网上的资料,一直没有找到详尽而又简单的方案。今天终于摸索出来在Unity3D中使用Kinect的方法,特此做个笔记。

    一、Unity和Kinect交互的环境配置

    我所使用的Unity3D的版本是Unity3.5,使用的Kinect SDK版本是SDK1.6,令Kinect和Unity交互的方法是使用CMU的封装,但是这个方法支持的Kinect SDK版本是SDK1.0,要想使用1.5或1.6版本的kinect SDK,就要做一些相应的修改。完整的方案如下:

    1、安装Uinty3D

    我使用的Unity3D版本是3.5,也可以在Unity3D官网上下载free版本的Unity。

    2、安装Kinect SDK

    我使用的SDK版本是1.6,可以在Kinect for Windows官方网站上下载。

    3、安装Kinect Wrapper Package for Unity3D

    这个就是CMU封装的用于Kinect开发的Unity3D导入包了。以后在Unity3D工程中,如果需要使用和kinect交互,那么就需要在这个工程中导入这个包。点击这里下载KinectWrapperPackage

    4、运行示例工程

    在CMU提供的KinectWrapperPackage包中,已经包含了一个叫做KinectExample.untiy的Unity示例工程。 在工程中导入KinectWrapperPackage包之后,在Unity的project面板上找到 Scences->KinectExample,双击就可以打开这个示例工程。


    或者是单独下载CMU提供的示例工程:newKinect,这个示例工程和导入的包中包含的示例工程是一样的。

    打开示例工程后,在Hierarchy面板中,可以看到这些内容:


    5、修改导入包中的相关文件

    CMU提供的unity导入包支持的kinect SDK版本是1.0,如果想使用其他版本的SDK,就要下载并替换导入包中的一些文件。具体来说就是KinectInterop.cs和KinectSensor.cs这两个文件。

    点击这里下载适用于Kinect SDK1.6版本的替换文件


    下载完成之后,将下载之后的文件替换掉上面面板中所标识的这两个文件就可以了。然后就可以运行示例工程,体验在unity创建的场景中使用kinect控制人物模型及小球的运动。

    使用修改后的导入包

    如果你觉得每次导入资源包,然后再修改两个文件实在麻烦,我已经将修改后的资源包导出。以后在每次开发工程时,只需要导入这个修改之后的资源包就行了。

    点击这里下载适用于Kinect SDK1.6的资源包

    二、用于kinect开发的包中包含的资源

    用于kinect开发的包中(Kinect Wrapper Package for Unity3D)包含了所有我们开发unity+kinect需要用到的脚本。

    导入包之后,所有我们需要的资源都会出现在project面板中,具体来说是以下的一些资源:

    Scenes

    • KinectExample – 示例场景,这个例子向你展示了如何通过在每一个kinect 可以追踪的骨骼点上放置小球来产生骨骼运动。以及怎样使用kinect来控制模型。

    Prefabs

    • Kinect_Prefab– 这个预设(prefab)包含了我们开发unity+kinect程序所必需的所有脚本。但是它并没有包含你需要的用于控制模型的控制器(controller)。
    • KinectPointMan – 这个预设(prefab)向你展示了KinectPointController这个控制器是怎样使用的。

    Kinect

    • KinectModelControllerV2 – 你需要将这个脚本拖放到你想要应用kinect控制的模型上。为了让模型能够跟上人的节奏,你需要将模型上控制模型动作的关键骨骼拖放到这个脚本暴漏的合 适的变量中 ,也就是将模型中的骨骼与kincet识别到的人的骨骼绑定起来。另外这个脚本暴漏的变量中,还有一个变量时标识模型是受哪个玩家控制。
    • KinectPointController – 你也需要将这个脚本拖放到场景中的游戏物体上。但是这个游戏物体不是模型,而是由一系列分别代表头部、肩部、手等人体部位的点组成。你需要将游戏物体中的 这些关键点都拖放到这个脚本暴漏的外部变量中。这样就可以使用kinect控制游戏物体了,游戏物体是由一系列的点组成的人体。
    • DisplayDepth – 这个脚本得到深度图像。
    • DisplayColor – 这个脚本得到RGB图像。
    • KinectRecorder – 这个脚本用于记录你的动作,并为kinect模拟器(emulator)产生回放文件。
    • KinectEmulator – 这个脚本模拟kinect设备.和KinectRecorder产生的回放文件一起工作。
    • KinectSensor – 这个脚本从Kinect设备中取得数据。需要替换这个文件使用特用版本的SDK.
    • DeviceOrEmulator – 这个脚本设置使用kinect物理设备还是kinect模拟设备.
    • SkeletonWrapper – 这个脚本抓取骨骼数据.
    • DepthWrapper – 这个脚本抓取深度图像数据.
    • KinectInterop – 这个脚本从Microsoft Kinect SDK中抓取数据.
    • Recordings/playbackDefault – 这是为kinect模拟设备准备的默认的回放文件.

    Models and Materials

    • rainbowMan
    这是示例模型。你需要将KinectModelControllerV2这个脚本拖放在这个模型上,并将组成模型的骨骼与脚本中暴漏的骨骼部位变量绑定在一块。然后就开始测试吧。

    三、在自己的工程中使用KinectWrapperPackage包

    要想在自己的工程中,使用KinectWrapperPackage包来达到unity3d和kinect交互。首先需要导入这个包到unity中,然后经过下面的步骤完成交互。

    1、设置Kinect_Prefab

    前面提到过了,如果在Unity中和Kinect交互,Kinect_Prefab这个游戏物体是必不可少的。 这个物体需要存在于你的场景中的某 处。并且在KinectWrapper 脚本中调用了DontDestroyOnLoad这个函数,所以当你切换场景时,它仍旧存在着,因此你不必在每个场景中都实例一个 Kinect_Prefab。

    在Unity中,将project面板中的Kinect_Prefab直接拖拽到Hierarchy面板就可以了。

    2、控制游戏中的角色

    为了控制场景中的角色的移动,你需要将KinectModelControllerV2这个脚本拖拽到场景中的模型上,并绑定骨骼;或者你为了控制一系列的游戏物体,你需要将KinectPointController拖拽这些物体上。下面分别说明这个脚本的使用。

    模型控制器:KinectModelControllerV2

    为使用模型控制器,请按照以下步骤:

    1. 拖拽脚本资源KinectModelControllerV2到场景中的模型中。
    2. 选择场景中的模型。找到模型中的暴漏变量Sw(它代表Skeleton Wrapper). 并将当前场景中的Kinect_Prefab拖拽给Sw这个变量。
    3. 详细展开你的模型,让模型的每一块骨骼在hierarchy面板中可见。
    4. 一个接一个地把模型中的骨骼拖拽到脚本中暴漏的对应的变量中.确保每一个骨骼都对应到了正确的变量上。
    5. 当模型中所有的骨骼都放置好了之后,改变暴漏的Player变量的值,这个变量表明该模型是受哪个玩家控制, 0代表第一个玩家,1 代表第二个玩家。
    6. 接下来要设置暴漏的Mask变量的值。设置合适的值,以决定是所有的骨骼都受Kinect控制,还是仅仅一部分骨骼受Kinect控制.如果这些 受Kinect控制的骨骼都不是你想要的,你可以自己写一个控制模型的脚本来代替KinectModelControllerV2。
    7. 当游戏玩家在控制模型时,如果你想要该模型同时播放自带的动画,那么你需要在暴漏的变量中选中animated选项,并设置BlendWeight变量的值,来决定模型受自带模型动画和Kinect驱动动作的最终混合效果。该变量取值范围为0到1之间。
    例如示例程序中骨骼和变量的对应关系如下:

    一系列点的控制器:KinectPointController

    为了使用该控制器控制一系列的点,请遵从下面几步:

    1. 在场景中创建一个空物体对象,作为你想要控制的一系列点的容器。
    2. 将其他的物体拖拽到刚刚创建的空物体中,并放置到相同的位置。使刚才创建的空物体成为这些物体的父节点。
    3. 拖拽KinectPointController脚本到这些物体的父节点上。
    4. 选中父节点,在Inspector面板中暴漏的变量中,找到Sw变量 (该变量表示Skeleton Wrapper).拖拽当前场景中Kinect_Prefab赋给这个变量。
    5. 拖拽你想利用Kinect控制的每一个物体到Inspector面板对应的合适的变量中。
    6. 设置Player变量(代表玩家)和Mask变量(代表哪些骨骼收到监控).

    示例程序中,不同的物体和变量的对应关系如下:


    仔细研究包中自带的例子,很容易就明白如何在Unity中结合Kinect开发了。

    *********************************************

    参考资料:
    unity3d Kinect SDK v1.5+Unity3D 体感游戏开发
    配置unity3D 3.5 with Kinect SDK1.6
    CMU WIKI:Microsoft Kinect – Microsoft SDK

    展开全文
  • Kinect+unity 实现体感格斗闯关小游戏

    千次阅读 多人点赞 2019-07-04 00:37:35
    文章目录项目地址1 项目概况1.1 项目简介1.2 项目目的1.3 主要技术2 设计2.1 基本概念2.2 框架2.3 算法2.4 模型2.5 调查问卷3 实现3.1 技术难点3.2 解决方案4 技术支持4.1 游戏设计技术4.1.1 MVC4.1.2 工厂模式4.1.3...

    这是我曾经做过的一个用Kinect 和 Unity 实现的一个Unity体感游戏

    效果图如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    下面是项目的实现报告, 如果想看Kinect技术可以直接跳到 4.2 Kinect技术总结

    项目地址

    https://github.com/wyj16340227/Kick996

    1 项目概况

    1.1 项目简介

    • 1.1.1 游戏介绍

    使用kinectuinity 3D引擎实现人机交互的AR闯关游戏:Kick996
    通过kinect获取玩家行为信息(包括动作、语音),通过算法转化为输入信息,控制角色动作完成交互。

    • 1.1.2游戏规则

    玩家具有跳跃攻击移动等动作,每一关有不同的敌人,通过攻击动作消灭敌人,完成闯关。


    1.2 项目目的

    kinect是目前应用最广泛的VR外设之一,我们小组计划初步学习kinect,结合学过的Unity 3D知识,进行人机交互,实现一个具体的小游戏。通过这个学习过程了解目前Kinect应用的范围,瓶颈以及日后的应用空间,体会VR技术对于现实生活的影响。


    1.3 主要技术

    • 1.3.1 kinect行为捕捉

    通过kinect for windows固件完成用户行为信息读取,通过筛选数据获得交互信息,舍弃多余信息。并通过接口传输信息。

    • 1.3.2 unity 3D游戏设计

    主要使用技术:刚体碰撞状态机工厂模式MVC模型消息发布模式

    • 1.3.3 语音识别

    通过Speech Platform API完成识别,并通过算法进行筛选(正则表达式匹配),筛选出正确语音,完成输入。


    2 设计

    2.1 基本概念


    2.2 框架

    • MVC模型

    将基本框架分为ModelViewController三个部分。分别控制数据、视图、控制器。
    Model单独存储数据结构,View记录视图中存在的对象及参数,Controller显示视图。


    2.3 算法

    • 工厂模式

    考虑到对象的销毁及产生需要占用大量资源,因此考虑使用对象工厂,通过控制生存状态,减少对象生产及销毁所造成的运算资源开销。
    状态为死亡的对象存放在视图以外。

    • 消息发布模式

    玩家将状态通报所有订阅对象,对象根据自己的状态选择将要执行的动作。


    2.4 模型

    • 场景模型

    使用Unity3D-Terrian组件进行场景构建。

    • 角色模型

    角色模型选择在unity asset store上购买。

    2.5 调查问卷

    经过针对性的问卷调查(对象多为在校学生),约有73%的人(大三居多)认为学习压力比较繁重,其中有77%曾经过选择并有意向继续选择小游戏纾解压力。
    通过对这些同学进行问询,普遍认为狂扁小朋友是一款有趣、能够纾解压力的游戏。
    由于产品尚未制作完成,因此无法进行体验调查。


    3 实现

    3.1 技术难点

    • 3.1.1 实时性不强

    kinect行为捕捉较为缓慢,很容易产生滞后感,当玩家动作过快,容易识别错误或无法识别动作,造成信息不准确及信息丢失的问题。很严重的影响游戏体验。

    • 3.1.2 游戏设计趣味性有待增强

    由于游戏操作较为简单,因此需要优美的场景及丰富的剧情来增强可玩性。对于unity3D引擎来说,挑战巨大。

    • 3.1.3 语音识别

    语音识别滞后性非常强,原则上来说,无法单独通过语音控制玩家动作。


    3.2 解决方案

    • 3.2.1 语音识别
      • 通过语音与动作相结合,减少滞后性带来的不便。
      • 通过组合技来延长动作时间,为语音识别提供更多的识别时间,减少滞后性。
    • 3.2.2 游戏性增强
      • 丰富剧情。向其中加入丰富的幽默的字幕解说,来吸引玩家的注意力,其本质是通过解压游戏+看趣味故事来放松。
      • 压缩场景。过长的故事线只会让玩家愈发觉得游戏无聊,因此采取快速游戏的策略,在玩家的游戏热情尚未结束的时候结束游戏。避免越玩越无聊的情况的出现。

    4 技术支持

    4.1 游戏设计技术


    4.1.1 MVC

    • 1.概念描述

    Model-View-Controller三个部分。分别控制场景,显示以及数据。

    • 2.模式应用

    在这里插入图片描述

    对应关系为:

    ObjectCharacter
    ModelModel
    UIControllerView
    ControllerController
    • 3.优势

    能够做到场景与对象完全分离,角色分工明确清晰。不会造成一个对象既要控制场景又要控制角色的情况,避免了很多设计上的冗余。


    4.1.2 工厂模式

    • 1.概念描述

    对于unity,重复的对象进行大量的DestroryCreate是一笔巨大的开销。因此,类似线程池,将对象存储在仓库中,在不使用时,将其SetActive(false);并放在摄像头的背面。使用时激活并放入场景中。

    • 2.实现逻辑
      • 得到对象

    在这里插入图片描述

    • 销毁对象

    在这里插入图片描述


    4.1.3 单例模式

    • 1.概念描述

    是unity中应用最为广泛的一种模式。顾名思义,即对某个对象,对于某个对象全局中只存在一个实例,其他队想要获得该对象的时候,都要通过它提供的方法GetInsitance来取得。

    • 2.模式应用

    全局中有一个单例SceneController

    事实上,Model SceneController UIController都应当作为单例。但是在设计中,ModelUIController放在了SceneController,中,因此可以通过在SceneController中添加Get方法来取得它们的实例。


    4.1.4 多场景切换

    • 1.概念描述

    由于游戏中需要多个场景,不同的场景需要不同的场景元素,因此在游戏设计中需要考虑多场景切换的问题。

    有两种较为常用的场景切换方法。

    第一种方法就是通过不停的切换摄像机的位置。通过将不同的布景放在各个不会互相干扰(摄像机不能同时拍摄到)的地方,由场景控制器来控制场景的变换。

    第二种方法是创建多个场景,并通过方法Application.LoadLevel()来切换场景。这种方法设计起来更加的方便且实用,但是存在数据传递的问题。

    • 2.技术难点

    采取第二种场景切换的方法,但是存在技术难点,即:当前场景的数据在切换到下一个场景的时候会销毁。

    有两种解决方案。

    第一种方案:在场景切换的时候将数据存放在本地文件中,在新场景加载出来后再从本地文件中读取数据。

    第二种解决方案为:将数据挂载在一个对象身上,并使用DontDestroyOnLoad()方法使其在场景切换时不被销毁。只需将其放在摄像机看不到的地方即可。


    4.1.5 发布者-订阅者模式

    • 1.概念描述

    角色消息的交互是必要的。例如,在本游戏中,玩家的位置、状态信息就时刻影响着敌人的动作。如果在update里不断地获取玩家的状态,将是一件开销十分巨大的事情。因此,使用消息的发布-订阅模式。一方作为消息的发布方,一方作为消息的订阅方;只有在发布方状态更改了之后,才会向订阅者发布消息。

    • 2.模式应用

    在本游戏中,有两组消息发布-接收者。分别是:

    发布者订阅者消息内容
    playerenemy
    SceneController
    状态信息(位置、生命、魔法etc)
    enemyFactorySceneController敌人信息

    在这里插入图片描述

    由于场景控制器要时刻控制游戏进度,当消灭的敌人数目达到下一关要求的时候,才会跳转到下一关。因此,需要EnemyFactorySceneController发布信息。

    • 3.实现难点

    由于C#语法中不能够继承多个类,因此无法让SceneController同时作为PlayerEnemyFactoryObserver,因此,在Suject中加入两个函数,实现分类订阅。

        //Player use it notify its observer
        public abstract void NotifyPlayer(PlayerState playerState);
    
        //EnemyFactory use it notify its observer
        public abstract void NotifyEnemy(int enemyNum, int bossNum);
    

    4.2 Kinect体感技术

    4.2.1 与Unity结合

    使用 Kinect-package中间件,版本为2.13, 支持Kinect2.

    这个包中间有很多Demo, 可以帮助快速上手项目, 其中重点Demo为:KinectGesturesDemo1 其中包括关于手势的检测。

    其中脚本

    • Kinect Manager Kinect控制器, 当加载此脚本时, 将会连接kinect,处理数据流
    • Kinect Gesture Listener Kinect 姿势识别器, 当加载此脚本, 会进行姿势的监控
    • **CubeGestureListener.cs ** 这个是自己写的脚本, 用于处理Listener的消息

    4.2.2 识别姿势

    监听器介绍

    Kinect 自带的识别器, 也就是 Kinect Gesture Listener

    能被流畅的识别以下手势:

    ◎RaiseRightHand / RaiseLeftHand – 左手或右手举起过肩并保持至少一秒

    ◎Psi –双手举起过肩并保持至少一秒

    ◎Stop – 双手下垂.

    ◎Wave –左手或右手举起来回摆动

    ◎SwipeLeft – 右手向左挥.

    ◎SwipeRight – 左手向右挥.

    ◎SwipeUp / SwipeDown – 左手或者右手向上/下挥

    ◎ Click – 左手或右手在适当的位置停留至少2.5秒.

    ◎RightHandCursor / LeftHandCursor – 假手势,用来使光标随着手移动

    ◎ZoomOut – 手肘向下,左右手掌合在一起(求佛的手势),然后慢慢分开.

    ◎ZoomIn – 手肘向下,两手掌相聚至少0.7米,然后慢慢合在一起

    ◎Wheel –想象一下你双手握着方向盘,然后左右转动。

    ◎Jump –在1.5秒内髋关节中心至少上升10厘米

    ◎Squat -在1.5秒内髋关节中心至少下降10厘米

    ◎Push – 在1.5秒内将左手或右手向外推

    ◎Pull -在1.5秒内将左手或右手向里拉

    接口介绍

    在CubeGestureListener里需要这一些函数 进行姿势处理:

    UserDetected()用于启动手势检测;

    UserLost()用于清理变量或者占用的资源。你并不需要移除UserDetected()中添加的手势。这些将会在调用UserLost()前自动清除。

    GestureInProgress()在一个手势开始但是还没有被结束或者取消时调用。

    GestureCompleted()在一个手势结束时调用。你可以在这里添加自己的代码来处理手势

    GestureCancelled()手势被取消时调用

    实现监听

    在此脚本中我们首先需要开启检测的手势: 我们需要用到的手势分别是:

    离散动作: 右手向左挥、右手向左挥、左手或者右手向上挥,,T字型

    连续动作: 前倾,后倾,左倾,右倾等动作

        public void UserDetected(long userId, int userIndex)
    	{
    		// the gestures are allowed for the primary user only
    		KinectManager manager = KinectManager.Instance;
    		if(!manager || (userIndex != playerIndex))
    			return;
    		
    		// detect these user specific gestures
    		manager.DetectGesture(userId, KinectGestures.Gestures.SwipeLeft);
    		manager.DetectGesture(userId, KinectGestures.Gestures.SwipeRight);
    		manager.DetectGesture(userId, KinectGestures.Gestures.SwipeUp);
            manager.DetectGesture(userId, KinectGestures.Gestures.Tpose);
            manager.DetectGesture(userId, KinectGestures.Gestures.LeanLeft);
            manager.DetectGesture(userId, KinectGestures.Gestures.LeanRight);
            manager.DetectGesture(userId, KinectGestures.Gestures.LeanForward);
            manager.DetectGesture(userId, KinectGestures.Gestures.LeanBack);
            
    		
    	}
    
    

    这样我们监听器就只会监听这些动作, 而其他动作检测到也不会触发。

    Kinect检测源码分析

    官方的监听器是这样检测左倾的, 因为Kinect会把人判断为26个骨头节点, 左倾就是左肩膀的节点距离地面的高度要小于右肩膀节点的高度

    // check for ShoulderRightFront
    case Gestures.ShoulderRightFront:
    switch(gestureData.state)
    {
        case 0:  // 左肩膀的节点距离地面的高度要小于右肩膀节点的高度。
            if(jointsTracked[leftShoulderIndex] && jointsTracked[rightShoulderIndex] && jointsTracked[rightHipIndex] &&
               (jointsPos[leftShoulderIndex].z - jointsPos[rightHipIndex].z) < 0f &&
               (jointsPos[leftShoulderIndex].z - jointsPos[rightShoulderIndex].z) > -0.15f)
            {
                SetGestureJoint(ref gestureData, timestamp, leftShoulderIndex, jointsPos[leftShoulderIndex]);
                gestureData.progress = 0.5f;
            }
            break;
    
        case 1:  // gesture phase 2 = complete
            if((timestamp - gestureData.timestamp) < 1.5f)
            {
                bool isInPose = jointsTracked[leftShoulderIndex] && jointsTracked[rightShoulderIndex] && jointsTracked[rightHipIndex] &&
                    (jointsPos[leftShoulderIndex].z - jointsPos[rightShoulderIndex].z) < -0.2f;
    
                if(isInPose)
                {
                    Vector3 jointPos = jointsPos[gestureData.joint];
                    CheckPoseComplete(ref gestureData, timestamp, jointPos, isInPose, 0f);
                }
            }
            else
            {
                // cancel the gesture
                SetGestureCancelled(ref gestureData);
            }
            break;
    }
    break;
    
    			// check for LeanLeft
    

    4.2.3 连续姿势和离散姿势

    其中离散动作 例如攻击,在这个函数里进行处理 GestureCompleted, 因为这些动作需要在完成时调用。而连续动作,例如前倾后倾, 则在GestureInProgress 进行处理, 因为在动作完成过程中,动作会发生变化,

    离散动作识别

    	public bool GestureCompleted (long userId, int userIndex, KinectGestures.Gestures gesture, 
    	                              KinectInterop.JointType joint, Vector3 screenPos)
    	{
    		// the gestures are allowed for the primary user only
    		if(userIndex != playerIndex)
    			return false;
    
            sGestureText = gesture + " detected";
            Debug.Log( sGestureText);
            
    
            if (gesture == KinectGestures.Gestures.SwipeLeft)
    			swipeLeft = true;
    		if(gesture == KinectGestures.Gestures.SwipeRight)
    			swipeRight = true;
    	    if(gesture == KinectGestures.Gestures.SwipeUp)
    			swipeUp = true;
            if (gesture == KinectGestures.Gestures.Tpose)
            {
                Tpose = true;
            }
            return true;
    	}
    

    首先我们设置4个bool变量swipeLeft、swipeRight、swipeUp、Tpose, 判断检测的姿势, 如果是对应姿势则会令这些变量为true, 但是因为是离散动作, 这样会导致当判断成功一次后, bool变量会一直变为true, 所以写一个接口, 当bool变量为为true时, 令它为false, 但是返回为true。 类似于 检测到一个动作后,变量还原

    例如判断是否是 SwipeUp(向上滑)接口如下, 只要其他部分调用此接口,就能知道是否进行SwipeUp操作

    连续动作识别

    连续动作识别则不需要重新写一个接口, 因为状态会一直变化。 不过会有倾斜程度的参(screenPos.z ),为了游戏体验,当没有倾斜太大的时候,将倾斜小的认为是直立, 这样更加便于操控, 不然结果就是只要稍微左移就会一直操纵任务左移, 而直到右移才会一直往右边, 我们需要一个中立的状态才好。 然后其他部分只要读取这四个变量就知道用户是否左倾,右倾了。

    	public void GestureInProgress(long userId, int userIndex, KinectGestures.Gestures gesture, 
    	                              float progress, KinectInterop.JointType joint, Vector3 screenPos)
    	{
            // the gestures are allowed for the primary user only
           
    
    
            if (userIndex != playerIndex)
    			return;
    
    	
    		 if((gesture == KinectGestures.Gestures.Wheel || gesture == KinectGestures.Gestures.LeanLeft || 
    		         gesture == KinectGestures.Gestures.LeanRight || gesture == KinectGestures.Gestures.LeanForward ||
                     gesture == KinectGestures.Gestures.LeanBack) && progress > 0.01f)
    		{
    			if(gestureInfo != null)
    			{
                    
                    if (gesture == KinectGestures.Gestures.LeanLeft && screenPos.z > detectSense)
                    {
                        sGestureText = "左转";
    
                        LeanLeft = true;
                    } else
                    {
                        LeanLeft = false;
                    }
                        
                    if (gesture == KinectGestures.Gestures.LeanRight && screenPos.z > detectSense)
                    {
                        sGestureText = "右转";
                        LeanRight = true;
                    }else
                    {
                        LeanRight = false;
                    }
    
                    if (gesture == KinectGestures.Gestures.LeanForward && screenPos.z > detectSense)
                    {
                        sGestureText = "前进";
                        LeanForward = true;
                    }
                    else
                    {
                        LeanForward = false;
                    }
    
    
                    if (gesture == KinectGestures.Gestures.LeanBack && screenPos.z > detectSense + 10)
                    {
                        sGestureText = "停止/后退";
                        LeanBack = true;
                    }
                    else
                    {
                        LeanBack = false;
                    }
    
                    progressDisplayed = true;
    				progressGestureTime = Time.realtimeSinceStartup;
    			}
    		}
    	
    	}
    

    和游戏操控结合, 实现同步

    人物移动

        void Update()
        {
            float v = Input.GetAxisRaw("Vertical");
            float h = Input.GetAxisRaw("Horizontal");
    
            if (slideChangeWithGestures && gestureListener)
            {
    
                if (gestureListener.LeanLeft)
                {
                    h = -1;   //水平移动大小  负数为左边
                }
                if (gestureListener.LeanRight)
                {
                    h = 1;
                }
                if (gestureListener.LeanForward)
                {
                    v = 1; //水平移动大小  负数为下边
                }
                if (gestureListener.LeanBack)
                {
                    v = -1;
                }
         
            }
        }
    

    按键操控

    if (slideChangeWithGestures && gestureListener)
    {
    	//检测动作  映射陈实体按键
        if (gestureListener.IsSwipeUp())
        {
            return KeyCode.J;   //攻击1
        }
    
        if (gestureListener.IsSwipeLeft())
        {
            return KeyCode.K;  //攻击2
        }
        if (gestureListener.IsTpose())
        {
            return KeyCode.R;  // 人物旋转180度
        }
        if (gestureListener.IsSwipeRight())
        {
            return KeyCode.Q; //向前瞬移
        }
    
        else
        {
            return KeyCode.None;
        }
    }
    
    

    5. 参考文献

    • Lamiaa A. Elrefaei, Bshaer Azan1, Sameera Hakami JCAVE: A 3D INTERACTIVE GAME TO ASSIST HOME PHYSIOTHERAPY REHABILITATION
    • V. Pterneas, “IMPLEMENTING KINECT GESTURES,” 27 January 2014. [Online]. Available:https://pterneas.com/2014/01/27/implementing-kinect-gestures/. [Accessed 2017].
    • M. Pedraza-Hueso, S. Martín-Calzón, F. J. Díaz-Pernas and M. Martínez-Zarzuela, “Rehabilitation
      Using Kinect-based Games and Virtual Reality,” Procedia Computer Science, vol. 75, pp. 161-168,2015https://doi.org/10.1016/j.procs.2015.12.233.
    • “Tracking Users with Kinect Skeletal Tracking,” [Online]. Available: https://msdn.microsoft.com/enus/library/jj131025.aspx. [Accessed 2017].
    展开全文
  • Kinect2.0入门教程(含unity结合)

    热门讨论 2015-07-24 16:44:40
    包含Kinect2,0的SDK简介以及Kinect2.0与Unity结合简介 以及部分教程
  • 【52PK 6月6日消息】微软将向Windows开发者发售Kinect体感设备,以帮助其开发新应用,而面向普通消费者的正式版也会在今年晚些时候公开发售。如今Kinect已经在官网开始预售,价格为199美元,开发者订购后在7月就可以...

    【52PK 6月6日消息】微软将向Windows开发者发售Kinect体感设备,以帮助其开发新应用,而面向普通消费者的正式版也会在今年晚些时候公开发售。如今Kinect已经在官网开始预售,价格为199美元,开发者订购后在7月就可以收到新的Kinect设备。

    605247d2d0c14a2bb9e7c865774a2e24.png

    Kinect是微软开发的一种3D体感设备,具有即时动态捕捉、影像辨识、麦克风输入、语音辨识、社群互动等许多功能。Kinect依靠相机捕捉三维空间中玩家的运动,因此不需要任何控制器,同时还可以辨识人脸,让玩家可以自动连上游戏。此外,它还可以辨认玩家声音接受命令。Kinect彻底颠覆了游戏的单一操作,让系统操作更加方便易用,也由此吸引了大批玩家。

    针对Windows推出的Kinect v2外观和此前为Xbox发布的版本相同,具备同样的动态捕捉功能,同样搭载了一颗1080p高清摄像头。

    早已有大批开发者表达了对Windows版Kinect的需求,以便开发Window应用,这是用此前发布的Xbox版本无法完成的。微软还未公开正式版的发布日期,但表示v2版本将在7月到达开发者手上,不出几月后普通消费者也将可以体验这一设备。

    目前Kinect在中国大陆还未开放预售,官方售价为1456元。但香港地区已可在官网订购,售价1544港元。

    展开全文
  • 使用HTML5开发Kinect体感游戏

    千次阅读 2016-12-29 11:04:03
    一、简介 ... 表面上看,这款游戏与其它体感体验无异,实际上,它一直运行于浏览器Chrome下,也就是说,我们只需要掌握前端相应技术,就可以开发基于Kinect的网页体感游戏。 二、实现原理 实
  • Kinect 体感连线小游戏

    2015-11-16 21:05:13
    实现了手势识别连线,人机交互,是学习Kinect体感的基础入门代码
  • Kinect迷你游戏 关于这个项目的所有信息都可以在 wiki 上找到。 可在 .Home 子页面上找到基本信息。 警告 !!! 在从 repo 下载最新版本之前,请安装 !!!
  • 基于kinect的3D 跑酷游戏
  • kinect和xboxYour Xbox One’s Kinect should “just work” after you set it up, but occasionally you may experience problems with voice or people recognition. You can recalibrate and reset your Kinect ...
  • Kinect介绍

    千次阅读 2019-05-12 16:55:25
    (一)Kinect的发展历史 Kinect最早是在2009年6月1日E3 2009上首次公布,当时的代号是“Projet Natal”意为初生,遵循微软以城市名作为开发代号的传统,“Projet Natal”是由来自巴西的微软董事Alex Kipman以巴西...
  • Kinect体感游戏切水果

    2021-02-13 23:48:13
    利用Kinect检测人体姿态进行体感游戏开发
  • Kinect开发之结合Unity3D进行游戏应用开发

    万次阅读 热门讨论 2014-03-25 10:09:08
    最近在用unity3d和Kinect结合开发一个项目,突然间发现了这个博客,感觉其中的Unity3d包太厉害了,挺有意思的,所以推荐给大家。以经本人测试 一、Unity和Kinect交互的环境配置 我所使用的Unity3D的版本是Unity4.1,...
  • Kinect开发变脸游戏

    2015-03-11 18:09:03
    利用Kinect SDK,在VS2010平台上,使用C#语言开发的变脸游戏,适用于Kinect初学者
  • Kinect入门教程视频

    千次阅读 2018-07-26 14:29:18
    YuYuYouEr Kinect SDK Wrapper for Unity3D入门级教程视频: https://v.douyu.com/show/j4xq3WDK5GjMLGNz 感谢 YuYuYouEr 大大!!!
  • 面向着Kinect摄像头,当右下角出现黄色的人身想表明Kinect体感设备检测成功。玩家身体向左向右可以变换跑道,身体下蹲可以使得角色下滑,起跳则可以使得角色起跳。 经典的跑酷玩法,跑道的障碍物有矮墙,高墙,滑梯...
  • 详细介绍kinect体感控制在游戏中的应用,自己做的PPT
  • 行业分类-网络游戏-基于kinect游戏下肢康复训练系统.zip
  • Unity结合 Kinect开发的插件,此txt为下载链接!Kinect v2 Examples with MS-SDK
  • Kinect发出命令,能使乌龟向左向右向前向后转动,并在这些基础上加入了使乌龟隐藏和出现
  • 微软官方发布了Windows版Kinect软件开发工具包(SDK),使得所有的Windows用户都能够体验专为Xbox 360游戏机开发的这款体感外设。开发者可以使用Kinect软件开发工具包中的动作感应技术去创建新的PC软件,为Kinect开发...
  • Unity Asset Store上的Kinect v2.0开发包,亲测可用,里面包含三个场景,1、追踪动作,2、滑动相册,3、手势识别。
  • Unity3D学习:结合Kinect进行游戏开发

    千次阅读 2014-11-15 10:26:37
     最近需要学习Unity3D和Kinect交互进行开发。查阅网上的资料,一直没有找到详尽而又简单的方案。今天终于摸索出来在Unity3D中使用Kinect的方法,特此做个...我所使用的Unity3D的版本是Unity3.5,使用的Kinect
  • 打算做一个仿照节奏光剑的游戏,先是花了一晚上找了找解决方案,有一个Openpose还有一个ThreeDPoseTracker,看了看配置好麻烦,而且都太吃配置了,我的1060还想多用几年,所以最后还是买了个Kinect 下面先探究下怎么...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,534
精华内容 1,413
关键字:

kinect游戏