KinectSDK + Unity3D学习总结
生活随笔
收集整理的這篇文章主要介紹了
KinectSDK + Unity3D学习总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Kinect結(jié)合Unity3D引擎開發(fā)體感游戲(一)
http://my.oschina.net/klttl/blog/161694? ? 最近公司項目需要做科技館的體感游戲,以前也沒接觸過游戲,雖然以前自己也是想做游戲,我想大部分都是學(xué)編程出來來做游戲,哈哈(請允許我淫笑一下,終于可以做這方面)。雖
然以前沒接觸過體感游戲,看到的體驗也是大部分看到的視頻,幸好現(xiàn)在網(wǎng)絡(luò)還是比較發(fā)達(dá),上網(wǎng)大概了體感游戲開發(fā),目前比較好的是Unity3D和Kinect結(jié)合交互進(jìn)行開發(fā)。現(xiàn)在心里的感覺
用句話說:哥現(xiàn)在也走在世界技術(shù)最前言,TMD碉堡了!
? 9月7號開始查閱網(wǎng)上的資料,一直沒有找到詳盡而又簡單的方案。網(wǎng)上目前我看到就三種方法,說是三種方法說白了就一種:中間件。形散而神不散--散文的最高境界(其實我語文不好,
對不起祖國氣我的期望,嗚嗚、、、)三種方法如下:
1.卡耐基梅隆的kinectWrapper.unitypackage;
2.OpenNI官方提供的OpenNI_Unity_Toolkit-0.9.7.4.unitypackage(現(xiàn)在官方不提供更新與支持了,支持的版本unity3.4,在往上版本會出現(xiàn)很多問題,需要修改很多地方,比較麻煩);
3.自己寫的交互的中間件,我在網(wǎng)上看見高手自己的寫的中間件,封裝為DLL,現(xiàn)在通過這段時間動手實現(xiàn),發(fā)現(xiàn)自己寫一個這樣的中間件其實也不難,后期也自己準(zhǔn)備寫一個。 我在采用的
第一種方法,原因上面三點大概說來了,第二點以后考慮支持的版本和官方的態(tài)度,所以暫時不考慮;第三種目前自己還沒寫,目前來說也不太現(xiàn)實,也暫時不考慮考慮。所以目前情況就暫
時考慮第一種;
?廢話說了那么多,相信各位機油們早就寂寞難耐了,現(xiàn)在就切入正題:
一、Unity和Kinect交互的環(huán)境配置 我目前所使用的Unity3D的版本是Unity3.5; 使用的Kinect SDK版本是SDK1.6; Kinect和Unity交互的卡耐基梅隆的kinectWrapper.unitypackage方法是
使用CMU的封裝,這個方法支持的Kinect SDK版本是SDK1.0,要想使用1.6版本以上的kinect SDK,就要做一些相應(yīng)的修改。完整的方案如下(這個也為什么上面說后期打算自己封裝一個類似這
樣組件DLL):
1、安裝Uinty3D我使用的Unity3D版本是3.5,上官網(wǎng)下載(需要注冊,才能用,我推薦大家去付點錢,我是自己找的破解碼,聲明不支持這樣的行為,大家懂就好)。
2、安裝Kinect SDK我使用的SDK版本是1.6,可以在Kinect for Windows官方網(wǎng)站上下載。
3、在Unity3D工程中,如果需要使用和kinect交互,那么就需要在這個工程中導(dǎo)入卡耐基梅隆的kinectWrapper.unitypackage。百度怎么用大家都懂吧(需要用kinect SDK版本是1.6以上版本
(1,7以上版本還沒試過替換是否可以,理論上應(yīng)該也可以),就要下載KinectWrapperPackage替換文件并替換導(dǎo)入包中的KinectInterop.cs和KinectSensor.cs這兩個文件即可) 好啦!目前
準(zhǔn)備工作都o(jì)k了!
二、簡單Kinect Wrapper Package for Unity3D包含了所有我們開發(fā)unity+kinect需要用到的腳本。
1.導(dǎo)入包之后,所有我們需要的資源都會出現(xiàn)在project面板中,具體來說是以下的一些資源: 在此輸入圖片描述
2.Scenes KinectExample - 示例場景,這個例子向你展示了如何通過在每一個kinect 可以追蹤的骨骼點上放置小球來產(chǎn)生骨骼運動。
Prefabs Kinect_Prefab- 包含了我們開發(fā)unity+kinect程序所必需的所有腳本。但是它并沒有包含你需要的用于控制模型的控制器(controller)。 KinectPointMan -?
KinectPointController這個控制器(controller)是怎樣使用的。
Kinect KinectModelControllerV2 - 需要將這個腳本拖放到你想要應(yīng)用kinect控制的模型上。為了讓模型能夠跟上人的節(jié)奏,你需要將模型上控制模型動作的關(guān)鍵骨骼拖放到這個腳本暴漏的
合適的變量中 ,也就是將模型中的骨骼與kincet識別到的人的骨骼綁定起來。另外這個腳本暴漏的變量中,還有一個變量時標(biāo)識模型是受哪個玩家控制。 KinectPointController - 需要將
這個腳本拖放到場景中的游戲物體上。但是這個游戲物體不是模型,而是由一系列分別代表頭部、肩部、手等人體部位的點組成。你需要將游戲物體中的這些關(guān)鍵點都拖放到這個腳本暴漏的
外部變量中。這樣就可以使用kinect控制游戲物體了
DisplayDepth - 得到深度圖像。
DisplayColor - 得到RGB圖像。
KinectRecorder - 用于記錄你的動作,并為kinect模擬器(emulator)產(chǎn)生回放文件。
KinectEmulator - 模擬kinect設(shè)備.和KinectRecorder產(chǎn)生的回放文件一起工作。
KinectSensor - 從Kinect設(shè)備中取得數(shù)據(jù)。需要替換這個文件使用特用版本的SDK.
DeviceOrEmulator - 設(shè)置使用kinect物理設(shè)備還是kinect模擬設(shè)備.
SkeletonWrapper - 腳本抓取骨骼數(shù)據(jù).
DepthWrapper - 腳本抓取深度圖像數(shù)據(jù).
KinectInterop - 從Microsoft Kinect SDK中抓取數(shù)據(jù).
三、使用KinectWrapperPackage包要想在自己的工程中 首先需要用unity3D創(chuàng)建一個空工程,然后將kinectWrapper.unitypackage導(dǎo)入這個包到unity中,然后經(jīng)過下面的步驟完成交互。
1、設(shè)置Kinect_Prefab前面提到過了,如果在Unity中和Kinect交互,Kinect_Prefab這個游戲物體是必不可少的。 這個物體需要存在于你的場景中的某處。所以當(dāng)你切換場景時,它仍舊存在
著,因此你不必在每個場景中都實例一個Kinect_Prefab。 在Unity3D中,找到project面板中的Kinect_Prefab直接拖拽到Hierarchy面板就可以了。
2、控制游戲中的角色為了控制場景中的角色的移動,你需要將KinectModelControllerV2這個腳本拖拽到場景中的模型上,并綁定骨骼; 當(dāng)然你為了控制一系列的游戲物體,你需要將
KinectPointController拖拽這些物體上。 下面分別說明這個腳本的使用(這兩個腳本需要自己更具情況去定制)。
控制器:KinectPointController: 在場景中創(chuàng)建一個空物體對象,作為你想要控制的容器。 將其他的物體拖拽到剛剛創(chuàng)建的空物體中,并放置到相同的位置。使剛才創(chuàng)建的空物體成為這些
物體的父節(jié)點。 拖拽KinectPointController腳本到這些物體的父節(jié)點上。 選中父節(jié)點,在Inspector面板中暴漏的變量中,找到Sw變量 (該變量表示Skeleton Wrapper).拖拽當(dāng)前場景中
Kinect_Prefab賦給這個變量。 拖拽你想利用Kinect控制的每一個物體到Inspector面板對應(yīng)的合適的變量中。 設(shè)置Player變量(代表玩家)和Mask變量(代表哪些骨骼收到監(jiān)控). 在此輸入圖
片描述
控制器:KinectModelControllerV2: 拖拽腳本資源KinectModelControllerV2到場景中的模型中。 選擇場景中的模型。找到模型中的暴漏變量Sw(它代表Skeleton Wrapper). 并將當(dāng)前場景
中的Kinect_Prefab拖拽給Sw這個變量。 詳細(xì)展開你的模型,讓模型的每一塊骨骼在hierarchy面板中可見。 一個接一個地把模型中的骨骼拖拽到腳本中暴漏的對應(yīng)的變量中.確保每一個骨骼
都對應(yīng)到了正確的變量上。 當(dāng)模型中所有的骨骼都放置好了之后,改變暴漏的Player變量的值,這個變量表明該模型是受哪個玩家控制, 0代表第一個玩家,1 代表第二個玩家。 接下來要
設(shè)置暴漏的Mask變量的值。設(shè)置合適的值,以決定是所有的骨骼都受Kinect控制,還是僅僅一部分骨骼受Kinect控制.如果這些受Kinect控制的骨骼都不是你想要的,你可以自己寫一個控制模
型的腳本來代替KinectModelControllerV2。 當(dāng)游戲玩家在控制模型時,如果你想要該模型同時播放自帶的動畫,那么你需要在暴漏的變量中選中animated選項,并設(shè)置BlendWeight變量的值
,來決定模型受自帶模型動畫和Kinect驅(qū)動動作的最終混合效果。該變量取值范圍為0到1之間。 在此輸入圖片描述
四、運行KinectWrapperPackage包中事例 保證Kinect設(shè)備連接成功指示燈為綠色,上面安裝包安裝配置好,最后運行事例 在此輸入圖片描述 注意圖片的左下角的數(shù)字,證明連接成功 ,連
接成功的時候Kinect設(shè)備還會自己調(diào)整角度(最左邊的指示燈會有紅色)并且模型會隨著你動而動
歡迎大家期待第二篇,將寫一個3D人物模型,隨著身體指示,產(chǎn)生轉(zhuǎn)身和前進(jìn)與跑步 先上一張圖(第二篇會上相關(guān)的腳本代碼,由于unity腳本主要是c#和js,所以我采用c#寫的腳本,9月7
號才接觸到unity和kinect,原來工作一直用c/c++,c#都是現(xiàn)學(xué)現(xiàn)買所以有不當(dāng)之處,還請大家使勁拍磚):?
========
KinectSDK 1.6 + Unity3D體感應(yīng)用
http://blog.csdn.net/yuanchunfa/article/details/8107628? ? 最近買了個Kinect中國版,加上新出的KinectSDK 1.6,于是開始嘗試起來,先是給同事的一個朋友幫忙,為Flash提供骨骼數(shù)據(jù),之前早就給了這個朋友網(wǎng)上一套KinectHtml5源碼,這個
代碼很早我編譯過的,能夠在支持Html5上瀏覽器使用,這個朋友說編譯失敗,當(dāng)時還是很疑惑為什么, 只是當(dāng)時沒條件編譯, 現(xiàn)在條件具備,就自己再用起這套源碼,發(fā)現(xiàn)是KinectSDK?
1.0的版本的Demo,怪不得我以前能直接編譯通過,而這位朋友編譯通不過,因為他采用的是KinectSDK 1.5。這次我采用Kinect SDK 1.6,看看ToolkitBrowser上示例,沒多久就把這份代碼
修改并編譯通過了。后面就嘗試在Unity3D上使用,網(wǎng)上查找了些方案,其中這篇文章不錯,Kinect+Unity3D 體感游戲開發(fā) — Kinect SDK v1.5,給出幾種方案,我做了相應(yīng)嘗試,現(xiàn)在也進(jìn)
行一下總結(jié):
1、Zigfu的ZDK
? ? 以前用OpenNI的時候用過,沒想到能夠支持Kinect,于是很高興的下好了trial版本,果然能用,不過發(fā)現(xiàn)一下子能打開Kinect設(shè)備,一下子不能打開Kinect設(shè)備,很是困惑,后面發(fā)現(xiàn)
360安全衛(wèi)士及360殺毒把Kinect服務(wù)當(dāng)木馬的提示,果斷設(shè)置為信任,也把360安全衛(wèi)士和360殺毒退出,在測試打開Kinect設(shè)備成功率高的多,但依然會有失敗的。
2、CMU的封裝
? ? 這套在看這篇文章是先下到,只支持Kinect SDK 1.0,本想修改一下用起來,但是懶的基因沒有馬上動手,而是再Google下,找到了這邊文章,下載替換文件,看了一下,Kinect SDK?
1.5跟Kinect SDK 1.6還是有區(qū)別,用了一下果然也是用不起來。
3、adevine1618開發(fā)的插件
? ? 缺點有說不在維護(hù),所以就沒有去試了。
4、根據(jù)Zigfu自己寫一套C#類庫
? ? 前面說到Zigfu的打開不穩(wěn)定,于是想自己寫一套能夠同時支持Kinect和OpenNI的封裝。沒花多長時間,總結(jié)了一下需要各抽象層就動手寫了骨骼數(shù)據(jù)方面,于是放到Unity進(jìn)行測試。發(fā)
現(xiàn)MonoDevelop編譯沒有問題,在Editor下確提示編譯出錯。這篇文章有提到:Unity3.5 只支持到.Net 3.5, 而Kinect SDK v1.5 最低要求是.Net 4.0. 所以直接在Unity中使用v1.5的
assembly是不行的。不過我嘗試才真正體會到真的是不行,在VS2012中改成.Net 3.5的話,編譯又通不過,改成.Net 4.0編譯通過,在Unity中又通不過,默認(rèn)是.Net 4.5。很好奇Zigfu是如
何做到的,ZDK下有Kinect10.dll及OpenNI.Net的引用,也是用C#寫的一套類庫啊,難道是Kinect SDK 1.5,而且用的是.Net 3.5?用Kinect SDK 1.5的話,為何CMU的封裝(替換文件了)有
如何跑不起來?
5、Unity Plugin方式,用C++寫DLL
? ? 這個動手寫以前就肯定是可行的,但還是動手寫了一下做了測試,發(fā)現(xiàn)Kinect 紅外燈能夠點亮了。這樣比CMU封裝更有好處,按更自然的C++方式來實現(xiàn),僅導(dǎo)出需要的接口就好了。
? ? 這么多方案下,最希望是能夠把Zigfu實現(xiàn)能夠把Kinect面部識別等更多功能放進(jìn)去,當(dāng)然是需要Unity能夠支持.Net 4.5了,目前方案是Unity Plugin方式了,把需求放到C++中去完成好
了。
========
資源
http://www.manew.com/labe/plus796.html體感相關(guān)資源,unity3d 體感插件等;
https://pan.baidu.com/s/1hs8t0US
motion-sdk-latest.zip
總結(jié)
以上是生活随笔為你收集整理的KinectSDK + Unity3D学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FFTW使用说明及实例调用
- 下一篇: 如何使用NSOperations和NSO