Unity+Kinect 开发脚本介绍
这些在KinectScripts文件夹下的管理器都是组件,你可以根据你想实现的功能在项目中使用它。
1.KinectManager 是最通用的组件,需要它与传感器交互以获取底层数据,譬如彩色数据流和深度数据流,以及身体和关节在Kinect空间中的位置(单位:米)。
2.AvatarController的目的是将检测到的关节位置和旋转传递到一个可操纵骨骼上。
3.CubemanController效果同上,但是它通过transforms 和线来展现关节和骨骼,以便于定位人体追踪问题;
4.FacetrackingManager(脸部追踪)用于处理脸部点阵和头/脖子旋转。如果与此同时5.KinectManager存在且可用的情况下, 它将被KinectManager 内部调用来获得头和脖子更精准的位置和旋转。
6.InteractionManager(交互) 用于控制手型光标,同时检测手部的抓取、释放以及点击。
7.SpeechManager用于识别声控(语言识别控制)。
如何将Kinect v2-Package 功能模块用在你自己的Unity 工程里面:
1.将 ‘KinectScripts’文件夹从插件包的Assets文件夹拷贝到你工程的 Assets文件夹下.该文件夹包含了 脚本,接口和过滤器(filters )。
2.将 ‘Resources’文件夹从插件包的Assets文件夹拷贝到你工程的 Assets文件夹下。这个文件夹包含了所有需要的库和资源,你可以不必拷贝那些你不打算用到的库(譬如64位库和Kinect-v1的库)来节省空间。
3.将 ‘Standard Assets’文件夹从插件包的Assets文件夹拷贝到你工程的 Assets文件夹下。它包含Kinect v2的MS包装类,等到Unity检测并编译新复制的资源和脚本。
4.将KinectManager.cs脚本作为组件添加到主相机或者其他已存在与游戏场景中的游戏对象上。作为与底层传感器交互获取底层数据的通用组件,它真的很重要。
5.使用其他你想加入到项目中的Kinect相关组件,所有这些组件均内部依赖于 KinectManager 。
如何将 AvatarController脚本用于你自己的模型上:
1.确认你的模型处于T-pose(可选),这是Kincet关节方向的归零姿势。
2.在Assets文件下选中该模型资源,在inspector面板上选中“Rig”标签。
3.将AnimationType设置成 ‘Humanoid’,将AvatarDefinition设置成 ‘Create from this model’。
4.点击Apply按钮。然后点击Configure按钮来确认关节被正确的指定了,完成以上步骤我们退出配置窗口。
5.将模型放置到游戏场景中。
6.将KinectScript文件夹下的AvatarController脚本作为组件添加到游戏场景中的模型游戏对象中。
7.确保你的模型上还挂有Animator组件,必须是激活且它的Avatar合理设置.
8.如有需要,可以启用或者禁用AvatarController组件上的MirroredMovement(镜像移动)和VerticalMovement(垂直方向移动) 设置项。记住:如果镜像运动被启用 ,模型的Y方向将旋转180°。
9.运行场景测试Avatar模型。如果需要,调整AvatarController的某些设置,然后重试 。
如何让Avatar的手绕着骨骼运动:
要做到这一点,你需要将KinectManager的“Allowed Hand Rotations”设置为“All”。KinectManager是示例场景中MainCamera的组件。
此设置有三个选项:
1.None - 关闭所有手的旋转,
2.Default - 启用手的旋转,除了骨头周围的扭曲,
3.All- 将所有手的旋转开启
如何利用Kinect 与GUI 按键和组件进行交互:
1.将InteractionManager添加到主摄像头或场景中的其他一直会存在的对象上。它用于控制手形光标并检测手的握拳,释放和点击。握拳即手掌拽紧拇指在其他手指之上,释放 - 将手打开,当用户的手不移动(静止不动)约2秒钟时,会产生点击。
2.启用InteractionManager组件的“Control Mouse Cursor”设置。该设置将手形光标的位置和点击传输到鼠标光标,这样就可以与GUI按钮,Toggles和其他组件进行交互。
3.如果需要使用拖放功能与GUI进行交互,请启用InteractionManager组件的“Control Mouse Drag”设置。一旦它检测到握拳并且拖动直到手释放的过程,以开始拖动功能。如果您启用此设置,您也可以以握拳姿势点击GUI按钮,而不是普通的的手点击(即保持原位,在按钮上方约2秒钟)。
KinectManager manager = KinectManager.Instance;
if(manager && manager.IsInitialized())
{Texture2D depthTexture = manager.GetUsersLblTex();Texture2D colorTexture = manager.GetUsersClrTex();// do something with the textures
}
如何获得身体关节的位置:
这个示例在KinectScripts / Samples / GetJointPositionDemo(脚本)。 您可以将其作为组件添加到场景中的游戏对象,以便在运行时看效果。 只需选择需要的关节并可选是否保存到csv文件。 不要忘记将KinectManager作为组件添加到场景中的游戏对象。 它通常挂载在示例场景中MainCamera上。 这是演示脚本的主要部分,用于检索选定关节的位置:
KinectInterop.JointType joint =KinectInterop.JointType.HandRight;
KinectManager manager = KinectManager.Instance;
if(manager && manager.IsInitialized())
{if(manager.IsUserDetected()){long userId = manager.GetPrimaryUserID();if(manager.IsJointTracked(userId, (int)joint)){Vector3 jointPos = manager.GetJointPosition(userId, (int)joint);// do something with the joint position}}
}
如何让游戏对象跟随用户的旋转:
这与前面的示例类似,在KinectScripts / Samples / FollowUserRotation(脚本)中演示。 要在实际中看到它,可以在场景中创建一个Cube,并将该脚本作为组件挂载其上。不要忘记将KinectManager作为组件添加到场景中的游戏对象。 它通常是示例场景中MainCamera的组件。
如何让游戏对象跟随头部位置和旋转呢?
您需要将KinectManager和FacetrackingManager作为组件添加到场景中的游戏对象。
例如,它们是KinectAvatarsDemo场景中MainCamera的组件。
然后,为了获得头部的位置和脖子的方向,在脚本中需要这样的代码:
KinectManager manager = KinectManager.Instance;
if(manager && manager.IsInitialized())
{if(manager.IsUserDetected()){long userId = manager.GetPrimaryUserID();if(manager.IsJointTracked(userId, (int)KinectInterop.JointType.Head)){Vector3 headPosition = manager.GetJointPosition(userId, (int)KinectInterop.JointType.Head);Quaternion neckRotation = manager.GetJointOrientation(userId, (int)KinectInterop.JointType.Neck);// do something with the head position and neck orientation}}
}
如何获得面部标志点的坐标?
您需要拿到各个FaceFrameResult对象的引用。
演示:KinectScripts / Samples / GetFacePointsDemo(脚本)。 您可以将其作为组件添加到场景中的游戏对象,以便查看运行中的效果。在脚本中调用其公共方法:GetFacePoint()获取面部标志点坐标。
不要忘记将KinectManager和FacetrackingManager作为组件添加到场景中的游戏对象。 一般来说,它们是KinectAvatarsDemo场景中MainCamera的一个组件。
如何将Kinect捕捉的运动与Mecanim动画混合
1.使用AvatarControllerClassic代替AvatarController组件。仅仅指定那些需要被传感器动画捕捉的关节。
2.将AvatarControllerClassic的SmoothFactor设置为0,以便立即应用被检测到骨骼的各个朝向。
3.为Mecanim动画层创建一个 (avatar-body-mask )阿凡达身体遮罩并应用,在这个遮罩里面,将上述提到的Kinect动画捕捉关节点的Mecanim动画设置为禁用。但别禁用根节点。
4.将KinectManager(一般位于示例场景的主相机上)组件的Late Update Avatars设为可用。
5.运行场景确认上述设置,当一个玩家被传感器检测到时,他的部分关节会被AvatarControllerClassic组件捕捉动画,其他部分 - 由Animator组件负责。
如何将你的模型添加到 FittingRoom-demo
1.每一个模型,导入它们并在Unity编辑器Assets视窗选中。
2.选中Rig选项卡,将AnimationType设置为:‘Humanoid’ ,并且将AvatarDefinition改为‘Create from this model’(基于此模型创建)。
3.点击应用(Apply)按钮,然后点击Configure按钮来确认所有需要的关节点都被正确的分配。衣服模型一般不能使用所有的关节点,因为它会导致阿凡达定义无效。这种情况下你可以通过手动分配丢失的关节点(显示为红色)
4.记住:这些关节在这个模型中位置必须与Kinect关节的结构相匹配。在示例KinectOverlayDemo2中有涉及,否则模型可能不会完全的覆盖用户的身体。
5.在FittingRoomDemo的Resources文件夹下一个个子文件夹来为你的模型分类(Shirts, Pants, Skirts等等)。
6.在模型分类文件夹,为第一步所有导入的模型继续创建文件名为数字且连续的文件夹形如:0000,0001,0002,
7.将你的模型移入这些数字标记的文件夹,每个文件夹一个模型。他们的贴图及材质球需要被一并移入。然后将这个Fbx文件重命名为‘model.fbx’.
8.你可以在各自的文件夹下放入每个模型的jpg格式(100 x 143px, 24bpp)的预览图,并将其重命名为 ‘preview.jpg.bytes’,如果你没有放入预览图,FittingRoom示例的模型选择菜单将显示‘No preview’(无预览).
9.打开FittingRoomDemo1场景。
10.为你的分类模型添加ModelSelector到KinectController游戏对象,将Model category与上面第5页中创建的子文件夹的名称相同。将Number of models设置与第6步中创建的子文件夹数值一一对应。
ModelSelector的其他设置必须与Demo中存在的ModelSelector一致。比如:
11.‘Model relative to camera’ 必须设置成‘BackgroundCamera’,
‘Foreground camera’必须设置为:‘MainCamera’,
‘Continuous scaling’ – enabled.
scale-factor (缩放因子)尽量设置为原来的1 并且'Vertical offset(垂直偏移量)’-设为:0.
稍后,你可以对他们进行微调以便更好地实现模型到身体的覆盖。
12.如果你想选中的模型在模型类别变更后持续的覆盖用户的身体,请将ModelSelector组件的Keep selected model设置启用,如果有几个类别(即ModelSelectors),例如用于衬衫,裤子,裙子的实例等等。在这种情况下,当类别改变并且用户开始选择裤子时实例时,选择的衬衫模型仍然覆盖用户的身体。
13.CategorySelector组件为改变模型和类别提供手势控制,并负责为同一用户切换模型类别(例如衬衫,裤子,领带等)。第一个用户已经存在一个CategorySelector(玩家索引为:0),你无需添加。
14.如果你计划做多人 fitting-room(换衣间),为每一个新增的用户添加一个CategorySelector组件。也可能需要为这些用户将使用的模型类别添加相应的ModelSelector组件。
15.运行场景,确保你的模型能在列表被选中且正确的覆盖用户身体。找到实现模型到身体完美覆盖的缩放因子和垂直偏移,可能需要些许调试。
16.如果要关闭场景中的光标交互,请禁用KinectController游戏对象的InteractionManager组件。 如果您想关闭手势(滑动切换模型,抬手改变类别),请禁用CategorySelector组件的相应设置。 如果您想关闭或更改T-Pose姿态校准,请更改KinectManager组件的“玩家校准姿态”(Player calibration pose)设置。
17.最后但并非最不重要:您可以使用FittingRoomDemo2场景来利用或试验单个叠加模型。 如果需要,调整AvatarScaler的比例因子设置以精确调整模型的全身,手臂或腿骨的比例。 如果您希望模型在每个Update中被重新缩放,请启用“连续缩放”(Continuous Scaling)设置。
UI点击事件的实现
1.获取左手(右手)关节的3D坐标
2.3D坐标转换为屏幕坐标
3.屏幕坐标转换UGUI坐标(得到手的位置在UGUI的位置)
4.判断手的位置是否在UGUI控件上
5.手如果在UGUI控件上,判断是否握拳
6.握拳就表示点击了该UGUI了
@Liam:有用→收藏→关注 听说长得好看的人都这么做!
Unity+Kinect 开发脚本介绍相关推荐
- unity网络开发_介绍Unity开发人员网络
unity网络开发 演示地址 As part of a larger plan, today we launch the first iteration of the Unity Developer ...
- Unity脚本介绍和常用API
Unity脚本介绍和常用API 脚本介绍 1.脚本 介绍 语法结构 编译过程 2.开发工具 MonoDevelop Visual Studio 3.脚本生命周期 简介 脚本生命周期的阶段 1.初始阶段 ...
- Unity编辑器开发——通过模板创建Lua脚本的两种方式(一)
个人学习笔记,如有错误.疑问.建议,欢迎留言. 声明:本文不得以任何形式进行转载. 前言:在Unity编辑器的Project界面,可以直接右键创建C#脚本,而目前许多游戏公司使用的是tolua.xl ...
- Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍
Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...
- Unity+C#开发笔记(七)| unity中继承MonoBehaviour类的脚本里的函数怎么调用 | ╭(●`∀´●)╯╰(●’◡’●)╮
继上文,有个蠢货单例模式只是用来引用,突然遇到了一个继承了MonoBehaviour的类,然后unity跟你讲:不!你不可以在我这里这么用! 啊这--吓得我当场百度... ************** ...
- Unity游戏开发官方入门教程:飞机大战(五)——实现飞船控制脚本
Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...
- 【Unity 题型】脚本开发
知识涉及:Unity 脚本生命周期 要点 以下关于密封类的说法,正确的是 A. 密封类可以用做基类 B. 密封类可以使抽象类 C. 密封类永远不会有任何派生类 D. 密封类或密封方法可以重写或继承 ...
- unity 关闭自己脚本_太可了!这些领域可以把Unity玩的那么好,带你开启新世界...
projects 作品 本期编辑:刺子 审核:OF君 Unity3D凭借 操作简单.易学. 灵活等优势,风靡全球. 从官网最新公布的数据来看, 其已占世界范围内45%的市场份额, 占据全球首位. 如今 ...
- Unity + Kinect基本上所有的手势二次封装(一)
下载链接: Unity3D 最新版Kinect v2 Examples with MS-SDK 2.21 体感识别 https://item.taobao.com/item.htm?spm=a21dv ...
- 删除 jar 的 asset_【unity游戏开发】SDK学习(1)-C#与jar交互
引言 通常一款游戏开发到后期,一般都会涉及到第三方SDK的接入与集成 对于不熟悉SDK接入的同学来说,接SDK每次都是云里雾里, 而熟悉SDK接入的同学又觉得不断地重复做接入SDK工作这样没有成就感, ...
最新文章
- 修改表主键字段数据类型(V2.0)
- android升级SDK后,XML graphical layout无法预览的解决
- go获取项目内所有proto_gRPC学习之三:初试GO版gRPC开发
- 解决Ubuntu14.04在外接显示器不能指定问题的最佳分辨率
- python 片段_python片段程序
- POJ - 1251(最小生成树.krustal)
- 应物联网要求而生 美国团队研发出零功耗红外探测器
- 当 Messaging 遇上 Jepsen
- Qt之高DPI显示器(二) - 自适配解决方案分析
- [VMware] vSphere 5 安装手记[1]-VMware ESXi 5.0.0 安装基本设置
- l298n使能端跳线帽_L298N 驱动模块的应用
- Windows操作系统原理笔记
- 未来改变世界的十大新技术
- C#分享网址到QQ空间带参数
- 小米5USB 计算机连接,小米手机如何连接win7电脑传文件|小米手机连接win7传文件的方法...
- xlp 开发环境在Ubuntu11.4中的建立
- java response.write_response.write()区别response.getWrite().write()
- 2022年G3锅炉水处理国家题库及在线模拟考试
- 2022年全球市场男士防脱发和增长产品总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 西门子 S7-300 PLC 从入门到精通的100个经典问题
热门文章
- Win32 API 列表5 (格式有点乱)
- java接口防抖_RxJava功能防抖
- 腾讯笔试经验-不是大牛-勿看
- 通过计算机主机数来划分子网,计算机网络知识梳理(2)——子网掩码及网络划分...
- 多媒体计算机用什么音箱好,5款性价比高的电脑小音箱推荐(每一款音质都相当ok)...
- 递归函数的例子python卖鸭子_递归算法实现卖鸭子
- 基于Harry Potter的数据可视化
- 服务器防火墙开启导致无法远程连接解决方案
- Java设计模式及应用场景之《抽象工厂模式》
- axis webservice 实验