一、Unity和Kinect交互的環境配置
我目前所使用的Unity3D的版本是Unity3.5; 使用的Kinect SDK版本是SDK1.6; Kinect和Unity交互的卡耐基梅隆的kinectWrapper.unitypackage方法是使用CMU的封裝,這個方法支持的Kinect SDK版本是SDK1.0,要想使用1.6版本以上的kinect SDK,就要做一些相應的修改。完整的方案如下(這個也為什么上面說后期打算自己封裝一個類似這樣組件DLL):
1、安裝Uinty3D我使用的Unity3D版本是3.5,上官網下載(需要注冊,才能用,我推薦大家去付點錢,我是自己找的破解碼,聲明不支持這樣的行為,大家懂就好)。
2、安裝Kinect SDK我使用的SDK版本是1.6,可以在Kinect for Windows官方網站上下載。
3、在Unity3D工程中,如果需要使用和kinect交互,那么就需要在這個工程中導入卡耐基梅隆的kinectWrapper.unitypackage。百度怎么用大家都懂吧(需要用kinect SDK版本是1.6以上版本(1,7以上版本還沒試過替換是否可以,理論上應該也可以),就要下載KinectWrapperPackage替換文件並替換導入包中的KinectInterop.cs和KinectSensor.cs這兩個文件即可) 好啦!目前准備工作都ok了!
二、簡單Kinect Wrapper Package for Unity3D包含了所有我們開發unity+kinect需要用到的腳本。
1.導入包之后,所有我們需要的資源都會出現在project面板中,具體來說是以下的一些資源:
2.Scenes KinectExample – 示例場景,這個例子向你展示了如何通過在每一個kinect 可以追蹤的骨骼點上放置小球來產生骨骼運動。
Prefabs Kinect_Prefab- 包含了我們開發unity+kinect程序所必需的所有腳本。但是它並沒有包含你需要的用於控制模型的控制器(controller)。
KinectPointMan – KinectPointController這個控制器(controller)是怎樣使用的。
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中抓取數據.
三、使用KinectWrapperPackage包要想在自己的工程中
首先需要用unity3D創建一個空工程,然后將kinectWrapper.unitypackage導入這個包到unity中,然后經過下面的步驟完成交互。
1、設置KinectPrefab前面提到過了,如果在Unity中和Kinect交互,KinectPrefab這個游戲物體是必不可少的。 這個物體需要存在於你的場景中的某處。所以當你切換場景時,它仍舊存在着,因此你不必在每個場景中都實例一個Kinect_Prefab。
在Unity3D中,找到project面板中的Kinect_Prefab直接拖拽到Hierarchy面板就可以了。
2、控制游戲中的角色為了控制場景中的角色的移動,你需要將KinectModelControllerV2這個腳本拖拽到場景中的模型上,並綁定骨骼; 當然你為了控制一系列的游戲物體,你需要將KinectPointController拖拽這些物體上。
下面分別說明這個腳本的使用(這兩個腳本需要自己更具情況去定制)。
控制器:KinectPointController: 在場景中創建一個空物體對象,作為你想要控制的容器。 將其他的物體拖拽到剛剛創建的空物體中,並放置到相同的位置。使剛才創建的空物體成為這些物體的父節點。
拖拽KinectPointController腳本到這些物體的父節點上。 選中父節點,在Inspector面板中暴漏的變量中,找到Sw變量 (該變量表示Skeleton Wrapper).拖拽當前場景中Kinect_Prefab賦給這個變量。
拖拽你想利用Kinect控制的每一個物體到Inspector面板對應的合適的變量中。 設置Player變量(代表玩家)和Mask變量(代表哪些骨骼收到監控)。

控制器:KinectModelControllerV2: 拖拽腳本資源KinectModelControllerV2到場景中的模型中。
選擇場景中的模型。找到模型中的暴漏變量Sw(它代表Skeleton Wrapper). 並將當前場景中的Kinect_Prefab拖拽給Sw這個變量。 詳細展開你的模型,讓模型的每一塊骨骼在hierarchy面板中可見。
一個接一個地把模型中的骨骼拖拽到腳本中暴漏的對應的變量中.確保每一個骨骼都對應到了正確的變量上。
當模型中所有的骨骼都放置好了之后,改變暴漏的Player變量的值,這個變量表明該模型是受哪個玩家控制, 0代表第一個玩家,1 代表第二個玩家。 接下來要設置暴漏的Mask變量的值。
設置合適的值,以決定是所有的骨骼都受Kinect控制,還是僅僅一部分骨骼受Kinect控制.如果這些受Kinect控制的骨骼都不是你想要的,你可以自己寫一個控制模型的腳本來代替KinectModelControllerV2。
當游戲玩家在控制模型時,如果你想要該模型同時播放自帶的動畫,那么你需要在暴漏的變量中選中animated選項,並設置BlendWeight變量的值,來決定模型受自帶模型動畫和Kinect驅動動作的最終混合效果。
該變量取值范圍為0到1之間。

四、運行KinectWrapperPackage包中事例
保證Kinect設備連接成功指示燈為綠色,上面安裝包安裝配置好,最后運行事例

注意圖片的左下角的數字,證明連接成功 ,連接成功的時候Kinect設備還會自己調整角度(最左邊的指示燈會有紅色)並且模型會隨着你動而動
歡迎大家期待第二篇,將寫一個3D人物模型,隨着身體指示,產生轉身和前進與跑步 先上一張圖(第二篇會上相關的腳本代碼,由於unity腳本主要是c#和js,所以我采用c#寫的腳本。
第一篇,我是基於卡耐基梅隆kinectWrapper.unitypackage中間件,利用上面的自帶例子,經過自己的摸索終於成功了,可以看Kinect結合Unity3D引擎開發體感游戲(一),現在大部分用卡耐基梅隆和OpenNI來作為unity與kinect交互,還一種就是自己封裝交互組件,經過這段時間研究后,自己封裝了一個dll,大概實現的功能:kinect攝像頭角度設置,RGB流,Depth流,玩家位數綁定,骨骼數據獲取等!后期計划把鼠標加進去,骨骼綁定功能進一步優化,想利用這個dll組件實現3D試衣鏡這樣的虛擬場景,不僅包括體感游戲!最終可以滿足絕大部分的開發情況!
卡耐基梅隆和OpenNI現在基本上對於高於Kinect1.7和Unity3D4.0支持不是很好,特別是openni官網都沒有支持更新了,對於高版本支持更是不好,卡耐基梅隆還是稍微好點,不缺配置也比較麻煩,還需要修改里面的代碼!對於不太熟悉kinect同學們更是不好上手!自己封裝組件,不斷傻瓜化了,更是知根知底!當然不是說自己是什么高手,只要把原理清楚了,大家寫一個也不是什么問題!

好了,簡單交代一下我開發環境:win8 + KinectSDK1.7 + Unity4.3.1(最新版本)哥熬了一個通宵破解了,想了解我這個例子的前提同學們必須對Unity3D比較熟悉,可以建立場景以及人物!對c#也要有了解。
上圖為利用unity3D建立簡單的人物場景!上述的場景都是基於unity自帶的素材建立的。 接下來該寫人物事件驅動,大概的功能就是向前、向左、向右、向后走動。代碼如下:


然后將上面的setHeroState添加到Updata函數后,然后將腳本綁定到人物模型即可。這篇就不講解自己封裝的組件dll,也不是這一篇就能講清楚的,后續的文章中會慢慢剖析講解!
下面就上圖給大家看看體感控制效果截圖:

上圖中包含RBG流 、Depth流以及手勢控制人物正在前行行走!也歡迎大家期待第三篇,會給大家展示一款較為成熟的體感作品! 再次感謝OSC各位基友的鼓勵!謝謝大家!
聲明:這篇代碼量也不大,主要目前我也是在摸索階段,unity工程量也大,不好把整個貼上來!后期代碼量會逐步加大干貨,並且包括視頻鏈接地址!
