FiveKM 2012-05-07
1. 下载安装Unity3D(目前版本为3.4)
2. 下载OpenNI的Unity3D wrapper(目前版本为0.9.2):
a. 地址:http://www.openni.org/Downloads/OpenNIModules.aspx
b. 按如下选择:
c. 下载完解压后有2个.unitypackage文件 3. 创建新的U3D(Unity3D)工程,导入载好的unitypackage文件,先导入OpenNIUnityToolkit_0.9.2.unitypackage,再导入NITEExtensions.unitypackage 这时在工程视图里能看到导入的所有文件 4. 开始熟悉wrapper(资源都在工程视图) a. 示例游戏:OpenNI-->Sample Scenes-->SingleSkeleton.,运行后能获得一个感性的认识。 b. 手册:OpenNI-->Documentation-->OpenNIPackageDocumentation,这个手册很重要,此后的学习都可以根据这个手册来。 c. 创建新的Scene,然后按照手册上的例子自己从零开始创建示例游戏。这篇手册需要通读的是第一部分:Unity OpenNI Unity Toolkit Overview---> OpenNI Package Overview,包括以下内容:
1. OpenNI Module Main Capabilities
2. Samples Overview
3. Additional Topics
第一节包含了所有需要理解的东西,第二节是例程讲解,第三节是附加话题。
可以先从第二节开始,边照着创建例程边查阅第一节的相关内容:
a. Single Skeleton Sample
这个例程介绍怎么创建单一角色,包括怎么让Sensor运行起来,怎么让玩家用自己的躯体去控制游戏角色的骨架。
* Single Skeleton Sample
1. 在Unity中创建一个空的scene
2. 往scene里添加object (如果不知道怎么添加:在Project视图中搜索object的名字,然后直接将object拖到Hierarchy视图)
a. 第一个就是OpenNISettings。加了这个后点击运行,正常的话应该可以看到sensor亮了。这个object实现的是驱动sensor,封装了OpenNI相应的函数。
该obejct有3个子项,我们目前只关心"OpenNI configuration", 选中后在Inspector窗口能看到不同的选项:
Mirror behavior // 表示是否要将深度数据进行左右镜像。勾上。
XML file // 通过XML 文件来定制一些参数,比如分辨率,帧率,Production Node等;也可以通过XML文件来导入录制好的深度视频,在需要识别特定动作的时候可以用来调试。
Use image generator? // 表示是否需要产生RGB图像。不勾。
Use user and skeleton? // 表示是否需要识别用户和骨骼。勾上。
Smoothing factor // 滤波参数,暂时用默认值0.5
如果想深入了解这个object,
1)阅读手册里相应的解释:在OpenNI Module Main Capabilities-->Centralized Initialization and Configuration-->OpenNISettings Prefab
2)看脚本代码,有2个脚本:OpenNISettingsManager,NIOpenNISettingsManagerInspector
OpenNISettingsManager - 主要是接受上面解释的参数,进行初始化和销毁的工作。这里关键的是NIContext,这是一个singleton,在脚本NIContext里。实际上NIContext就是对OpenNI的context的封装。如果不了解什么是context,可以参阅OpenNI的文档。
NIOpenNISettingsManagerInspector - 主要是实现在Inspector显示相关选项。需要做扩展的时候可以看看。
b. 接着添加NIDepthViewer,这时候运行,就能看到右上角多了一个视窗,里面显示的是深度视频。(注:视频里人的动作是反的,你往左,视频里的自己往右。如果不勾上上一个object的"Mirror behavior",就不会反了,这里先不理会)有了这个,就能清楚地看到镜头能看到的范围。
c. 再添加NIRadarViewer, 运行,在游戏的左上角能看到"User Radar", 当有用户被检测到的时候,会出现一个红色的方块,方块里面有数字(比如1)代表用户号。
d. 添加角色。这个比较有趣。添加ConstructionWorkerPrefab,然后在Hierarchy中选中这个object,再将鼠标移到Scene窗口,按”F“键,这时候就可以看到工人模型了。运行,会看到工人模型以校正姿势站在屏幕中间(看起来比较小,以后可以调整)。这时候自己做校正动作,会看到左上角RadarViewer里的小方块会从红色变成黄色最后变成绿色,绿色就表示校正成功了,但工人模型却没有动起来,因为我们还缺少一个object,看下一步:
e. 添加NISkeletonPrefab,运行,校正,工人模型驱动起来了!这个object的功能就是实现用户驱动角色。里面包含了2个脚本:
1) NIUsers To Player Mapper: 用来管理user和player之间的映射,实际上很简单,先识别出来的user给分配一个小的player ID。
2) NISkeleton Users Manager: 用来连接player和skeleton controller。默认会自动搜索Skeleton controller,也可以手动指定(在多玩家的场合用得上,比如player1映射到skeleton controller1,player2映射到skeleton controller2)。skeleton controller:是用来驱动character的,比如工人模型,你可以在ConstructionWorkerPrefab里找到这个脚本。
总结起来,NISkeletonPrefab实现了user(玩家)到player(游戏里的玩家)到skeleton controller(可以control不同的模型)的连接。会有user,player和skeleton controller的原因:每个use可以驱动不同的player,比如你和朋友一起玩游戏,你和朋友都是user,各自驱动自己的player,而每个player又可以有不同的外观,就象赛车游戏,你可以选择不同的车型。
想深入了解这个object,同样有2种方法:
1. 看手册:OpenNI Module Main Capabilities-->Skeleton Control-->NISKeletonPrefab
2. 读脚本:NIUsersToPlayerMapper, NISkeletonUsersManager-------------------------------------------------------------------------------------------
本篇基于最新的wrapper v0.9.7.4(该版本已经不需要做校准姿势)介绍怎么从零开始把自己的人物模型驱动起来,目的是给读者一个能运行的示例,在这过程中不会对概念做过多的解释,详细请参照wrapper的帮助文档。
1. 安装Unity3.4
2. 下载v0.9.7.4的wrapper (解压得到的是一个文件:OpenNI_Unity_Toolkit-0.9.7.4.unitypackage)
3. 打开Unity创建一个空的工程
4. 导入OpenNI_Unity_Toolkit-0.9.7.4.unitypackage
5. 导入你自己的人物模型,这里以asset store上的战士模型为例
6. 加入人物模型
7. 驱动3D摄像头(Kinect或ASUS Xtion Pro,看你用的是什么设备)
8. 一切准备工作做好了,现在可以开始驱动人物模型了
9. 现在模型已经完全驱动起来了,为了好看,你可以加入灯光,同时把战士模型放大一些。
建议初学者对本篇的每一步为什么能工作思考一下,然后从文档OpenNIPackageDocumentation中找答案。
本系列关于OpenNI的Unity wrapper就介绍到这里,近期不会再有更新。谢谢阅读。