亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Unity3D和Kinect的體感跑酷游戲開發(fā)關(guān)鍵技術(shù)設(shè)計與實現(xiàn)

        2015-12-13 06:55:01張帥周恒杰張琳濤
        三明學(xué)院學(xué)報 2015年6期
        關(guān)鍵詞:體感隊列物體

        張帥,周恒杰,張琳濤

        (三明學(xué)院信息工程學(xué)院,福建三明,365004)

        基于Unity3D和Kinect的體感跑酷游戲開發(fā)關(guān)鍵技術(shù)設(shè)計與實現(xiàn)

        張帥,周恒杰,張琳濤

        (三明學(xué)院信息工程學(xué)院,福建三明,365004)

        針對游戲中虛擬現(xiàn)實游戲的趣味性,交互性,以及虛擬現(xiàn)實游戲的操縱性等問題,設(shè)計基于Kinect體感設(shè)備和Unity3D游戲,對體感設(shè)備捕獲到的數(shù)據(jù)進行分析,使游戲中的人物的行動符合我們的預(yù)期,研究場景的實時動態(tài)加載、場景優(yōu)化和NGUI等關(guān)鍵技術(shù),以滿足游戲的交互性,趣味性和游戲真實性,對今后體感游戲的開發(fā)有一定的參考價值。

        Unity3D引擎;Kinect體感設(shè)備;體感識別;NGUI插件

        隨著輸入設(shè)備的發(fā)展越來越先進,體感捕捉設(shè)備漸漸映入人們的眼簾。據(jù)調(diào)查,目前以XBox360為平臺的體感游戲(如Kinect大冒險和運動會、舞蹈大師、基于體感技術(shù)的切水果等)越來越豐富,玩法越來越新穎。與傳統(tǒng)的采用輸入設(shè)備(如鍵盤、鼠標(biāo)或觸屏)來操作游戲,體感游戲采用Kinect體感捕捉設(shè)備,玩家能夠通過自己的肢體動作來控制游戲中角色的行動,感覺如置身游戲之中,增強了游戲的趣味性,且游戲中的操作易于掌控,通過一些簡單上手的肢體動作來操控。在游戲設(shè)計與實現(xiàn)方面,有著關(guān)卡簡單,目標(biāo)明確,趣味性強等特點。

        本文基于Unity3D引擎,利用Maya三維建模軟件完成游戲場景搭建,在Unity3D進行腳本開發(fā),使用Kinect體感設(shè)備來進行人物控制。重點研究Kinect設(shè)備的體感數(shù)據(jù)處理以及Unity中模型簡化、腳本驅(qū)動等關(guān)鍵技術(shù),最終完成PC端體感游戲的發(fā)布,為今后Kinect體感游戲開發(fā)提供參考。

        1 Kincet設(shè)備的體感數(shù)據(jù)處理

        1.1 Kinect傳感器

        Kinect骨架追蹤處理流程的核心是一個無論周圍環(huán)境的光照條件如何,都可以讓Kinect感知世界的CMOS紅外傳感器。該傳感器通過黑白光譜的方式來感知環(huán)境:純黑代表無窮遠,純白代表無窮近。黑白間的灰色地帶對應(yīng)物體到傳感器的物理距離[1]。Kinect負責(zé)遍歷圖像中較可能是人體的移動物體,類似于人眼下意識地聚焦在移動物體上。然后Kinect會對景深圖像進行像素級評估,來辨別人體的不同部位。同時,這一過程必須以優(yōu)化的預(yù)處理來縮短響應(yīng)時間。Kinect采用分割策略來將人體從背景環(huán)境中區(qū)分出來,即從噪音中提取出有用信號。Kinect可以主動追蹤最多兩個玩家的全身骨架,或者被動追蹤最多四名玩家的形體和位置。在這一階段,我們?yōu)槊總€被追蹤的玩家在景深圖像中創(chuàng)建了所謂的分割遮罩,這是一種將背景物體(比如椅子和寵物等)剔除后的景深圖像。在后面的處理流程中僅僅傳送分割遮罩的部分,以減輕體感計算量。

        1.2體感設(shè)備的數(shù)據(jù)處理

        在Unity3D中,接入Kinect顯示的是一個三維的骨架。Kinect能識別全身21個點,包括頭部,腰部,左手,右手、左腳、右腳并對其進行細分,例如,左手的部分就包括左肩部,左手肘部,左手腕處等[2]。如圖1。

        圖1 Kinect骨架

        在Unity3D中給每一個斷點創(chuàng)建一個Sphere,并重命名成部位的名稱,病給每個部位打上標(biāo)簽(Tag),方便根據(jù)標(biāo)簽(Tag)進行場景中物體的查找。

        Head=GameObject.FindWithTag("HEAD");

        //獲取斷點信息,通過Tag

        在系統(tǒng)中還應(yīng)處理三維端點信息來判定人物的動作。例如,需要判斷人物是否進行跳躍,可以假設(shè)如果頭部骨架的坐標(biāo)超過了一個事先設(shè)定好的值的時候,就執(zhí)行跳躍操作。

        floatheadHigh=1.6f;//設(shè)置一個最高點的值

        if(Head.transform.localPosition.y>headHigh&&isJump){ ....

        }//滿足條件執(zhí)行跳躍功能如果要識別一個身體向左或者向右扭動的動作時,就需要計算腰部斷點和肩部端點的夾角。將腰部端點和肩部端點的正切值計算出來,在進行反三角,即可得到其弧度,在進行弧度的判斷,就可以得知身體是否扭動。

        KL=(Shoulder_left.transform.position.y-Hip_center.transform.position.y)/(Shoulder_left.transform.position.x-Hip_center.transform.position.x);

        KL=Mathf.Atan(KL);

        if(KL>=0.8f&&KL<){//判斷夾角是否大于0.8

        ……

        }

        在Unity3D中只需要具體研究身體部位上每個端點是如何移動的,從中分析其數(shù)學(xué)關(guān)系,通過簡單的數(shù)學(xué)計算,便可得到我們需要的結(jié)果。

        1.3手掌模擬鼠標(biāo)技術(shù)

        在體感游戲中,一切的操作都應(yīng)該用身體動作來實現(xiàn)。因此,在開始界面的控制上,通過手掌模擬鼠標(biāo)來進行懸空操作,進行按鈕的選擇。

        rightHand=GameObject.FindGameObjectWithTag("HAND_RIGHT");

        初始化右手物體,這樣,就能獲取到其相關(guān)的位置信息。

        tempX=XValue*(rightHand.transform.localPosition.x+0.3f);

        tempY=YValue*((rightHand.transform.localPosition.y-1.5f)*(-1.0f));

        自定義一個手勢識別區(qū)間,通過計算,得到手掌在屏幕上顯示的位置。

        GUI.DrawTexture(new Rect(tempX,tempY,50,50),texture);

        ①壩體堆石區(qū)中部采用部分砂粒料填筑,范圍為EL 895~940 m。本工程壩料分區(qū)充分利用了爆破堆石料力學(xué)性能好、抗剪強度高、休止角大、滲透系數(shù)大的特點,把它布置在堆石區(qū)上下游提高壩坡穩(wěn)定性,布置在底部可加強壩體排水。壩體堆石區(qū)中部布置砂礫石區(qū),充分利用砂礫石具有高壓縮模量的特點,減少壩體沉降變形。

        通過自帶的GUI相關(guān)API把模擬出的鼠標(biāo)顯示在計算機顯示屏上,texture為顯示鼠標(biāo)的UI。當(dāng)模擬出的鼠標(biāo)在按鈕上懸停的時候觸發(fā)一個定時器(time-=0.04f;time是事先定義好的值,當(dāng)time等于0且鼠標(biāo)懸停在物體上,則觸發(fā)按鈕,執(zhí)行按鈕的功能)。

        2 Unity3D跑酷游戲設(shè)計關(guān)鍵技術(shù)

        2.1游戲場景設(shè)計

        在模型設(shè)計上,采用三維建模軟件(3DMAX,MAYA等)設(shè)計完整的3D模型并且導(dǎo)入。并且制作好規(guī)格相同可以拼接的模型。在Unity3D中,簡單的地形和簡單的基本對象(如樹木,花草等)可在Unity3D中直接進行創(chuàng)建,需要特定的模型則需要通過Maya這類三維軟件來進行創(chuàng)建。默認(rèn)情況下Unity3D中的單位為1cm,而Maya轉(zhuǎn)Unity3D的比例為0.01∶1,因此,在創(chuàng)建模型之前,需要做好模型大小的規(guī)劃操作。對于模型的面片數(shù),控制在32500個之內(nèi)為佳。當(dāng)一個三維模型創(chuàng)建完畢之后,需要對其進行命名規(guī)范。

        2.2游戲場景優(yōu)化

        Unity3D中,并不支持所有的材質(zhì)球,只有標(biāo)準(zhǔn)材質(zhì)球如Blin,Lambert等材質(zhì)會被Unity3D支持。并且貼圖的分辨率必須為2的N次冪才能被Untiy3D所接受。在游戲場景中,不斷的實例化燈光和場景必然會消耗更多的CPU和GPU,通過燈光烘焙技術(shù),將燈光的效果烘焙到貼圖上,就不必每次都實例化燈光消耗GPU的渲染計算,從而使游戲變得流暢。遮擋剔除技術(shù)在游戲優(yōu)中必不可缺的一種技術(shù)[3]。遮擋剔除的運行將通過在場景中使用一個虛擬的攝像機來創(chuàng)建一個物體潛在可視性狀態(tài)(set)的層級。這些數(shù)據(jù)可以讓每個運行時間內(nèi)的攝像機來確定什么能看見什么看不見。通過這些數(shù)據(jù),Unity將確定只把可以看見的物體送去渲染。這將降低Drawcalls的數(shù)量并提供游戲的運行效率。

        2.3地圖控制

        在Unity3D中,開辟存放需要實例化模型塊的數(shù)組,在這個數(shù)組中,存放的都是拼接地圖的零件。拼接地圖需要的技巧就是使用隊列進行拼接。首先初始化一個隊列,并將模型實例化,存入隊列中,同時定義一個TempPos的變量來存下當(dāng)前的位置坐標(biāo),將當(dāng)前的位置坐標(biāo)加上模型寬度的一半,在這個坐標(biāo)下實例化下一個模型塊,然后存下當(dāng)前坐標(biāo),無限上述步驟。一般我們會把隊列定義在有50個元素左右,當(dāng)存滿之后,只需要從隊尾出隊一個元素,做坐標(biāo)的變換,然后再讓物體入隊,這樣,就能重復(fù)使用這些物體,減少內(nèi)存和CPU消耗。

        private Queue<GameObject>Terrian;

        通過C#自身的泛型容器來生成一個隊列類。

        StartRun();

        }

        通過一個For循環(huán)來進行道路的初始化。

        temp=Instantiate(NoZhangAi,terrianPosition,thisRotation)as GameObject;

        temp.transform.parent=father.transform;

        temp.transform.localPosition=Vector3.zero;

        temp.transform.localPosition=terrianPosition;

        temp.transform.localEulerAngles=Vector3.zero;

        Terrian.Enqueue(temp);

        terrianPosition.z+=12.0f;

        count++;

        在道路初始化方面,通過Instantiate方法實例化出道路模型,同時把道路加到一個父節(jié)點上,方便進行場景的管理,設(shè)置改模型的方向和旋轉(zhuǎn)為默認(rèn)值,把模型壓入隊列中,同時改變實例化坐標(biāo)為下一個點。到達一定的節(jié)點,就生成彎道的模型,同時改變從此以后所有直道模型的旋轉(zhuǎn)屬性。向左轉(zhuǎn)時,角度加上90°,向右轉(zhuǎn)時,角度加上180°,角度變化的規(guī)律取決于道路模型是創(chuàng)建的規(guī)格。

        terrianR.y+=180.0f;

        terrianRotation.eulerAngles=terrianR;

        temp=(GameObject)Instantiate(Terrian_Turn,terrianPosition,terrianRotation);

        道路的更新依據(jù)隊列的性質(zhì),先進后出,在需要更新道路時,只需將隊尾的物體調(diào)用到隊首即可。代碼如下:

        Destroy(Terrian.Dequeue());做相應(yīng)的變換之后,再將物體入隊:

        Terrian.Enqueue(temp);無限場景的處理就是基于隊列這個結(jié)構(gòu),不斷的出隊入隊,不斷的拼接地圖來達到這個效果。

        2.4 NGUI插件的使用

        2.4.1 NGUI介紹及其創(chuàng)建UI

        在Unity3D中,創(chuàng)建并且管理UI的解決法案大部分是使用NGUI插件。NGUI是嚴(yán)格遵循KISS原則并用C#編寫的Unity(適用于專業(yè)版和免費版)插件,提供強大的UI系統(tǒng)和事件通知框架[4]。其代碼簡潔,這意味著程序員可以很容易地擴展NGUI的功能或調(diào)節(jié)已有功能。對所有其他用戶而言,則是更高的性能、更低的學(xué)習(xí)難度和更加有趣。在NGUI中,通過Widget Tool來創(chuàng)建所需要的UI。

        2.4.2 NGUI圖集工具

        在游戲開發(fā)的過程中,往往需要很多的圖片素材。隨著圖片素材的增多,圖片漸漸的變得難以管理,而且占的空間越來越多,會產(chǎn)生很多的冗余。這時,使用圖集工具是最好的選擇。將圖片打包成圖集,方面管理,減少圖片所占空間冗余[5]。選擇NGUI>OPEN>ALTASMAKER選項,選擇圖集打包工具,選擇相應(yīng)的圖片進行打包,NGUI會自動生成相關(guān)的材質(zhì)球和貼圖文件,方便快捷,見圖2~3。

        圖2創(chuàng)建的圖集材質(zhì)球

        圖3 NGUI圖集打包工具

        2.4.3 NGUI事件監(jiān)聽機制

        NGUI的監(jiān)聽事件我們通過C#委托機制來實現(xiàn)監(jiān)聽。

        GameObject button=GameObject.Find("UIRoot(2D)/Camera/Anchor/Panel/LoadUI/Main-Common/Button");

        UIEventListener.Get(button).onClick=ButtonClick;

        獲取需要監(jiān)聽的對像,通過UIEventListener中的代理來監(jiān)聽事件。上述代碼中把ButtonClick這個方法賦予onClick這個事件。當(dāng)UIEventListener接收到信息時,則會自動調(diào)用該事件。

        3 游戲?qū)崿F(xiàn)

        在Unity3D中創(chuàng)建一個新的工程并導(dǎo)入KinectForUnity插件包,完成Kinect對Unity3D的支持。同時導(dǎo)入NGUI插件包,以便基于NGUI進行UI的開發(fā)。在菜單欄中選擇BuildSettings,將保存好的場景文件拖拽到對話框里,完成游戲的導(dǎo)出,見圖4~5。

        圖4資源列表

        圖5游戲編輯視窗

        4 結(jié)束語

        本文主要研究基于Unity3D的Kinect體感游戲開發(fā),深入剖析體感識別的基礎(chǔ)數(shù)學(xué)思想,巧妙利用場景自由變換技術(shù)完成跑酷游戲的基本設(shè)計思路和NGUI的監(jiān)聽事件及其用法,對體感游戲的開發(fā)具有一定參考價值。

        [1]MICHELLE MENARD.Game d evelopment with Unity[M].史曉明,李強,譯.北京:機械工業(yè)出版社,2012.

        [2]張帆.Unity3D游戲開發(fā)基礎(chǔ)[M].杭州:浙江工商大學(xué)出版社,2013.

        [3]宣雨松.Unity3D游戲開發(fā)[M].北京:人民郵電出版社,2012.

        [4]劉明昆.三維游戲設(shè)計師寶典[M].成都:四川電子音像出版中心,2005.

        [5]wILLIAM R SHERMAN,ALAN B C RAIG.Understanding v irtual r eality:i nterface,a pplication and d esign[M].San Fransisco:Morgan Kaufmann,2002.

        (責(zé)任編輯:朱聯(lián)九)

        The Research and Implementation of the Key Technology of the Somatosensory of Parkour Games Based on Unity3D and Kinect

        ZHANG Shuai,ZHOU Heng-jie,ZHANG Lin-tao
        (Insititule of Information Engineering,Sanming University,Sanming 365004,China)

        According to the problems of the virtual reality game in the funny,interactivity and themanipulation of the virtual reality games,design game based on Kinect somatosensory equipment and Unity3D game engine,analyzed the captured data from the Kinect somatosensory equipment,making the character in the game consisted with our expectations.To meet the game's interactivity,funny and game authenticity,researched the key technologies such as the Real-time and dynam ics loaded the scene,the scene optimization and NGUIand so on to meet the game’s interactivity,funny and game authenticity,for the certain?reference value of the future developmentof somatosensory game.

        Unity3D;Kinect;somatosensory;recognition;NGUI

        TP311.52

        A

        1673-4343(2015)06-0032-05

        10.14098/j.cn35-1288/z.2015.06.007

        2015-05-19

        福建省大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練項目(201411311061);福建省教育廳科技項目(JA13295))

        張帥,女,山西交城人,講師。主要研究方向:虛擬現(xiàn)實與游戲開發(fā)。

        猜你喜歡
        體感隊列物體
        體感交互技術(shù)在腦卒中康復(fù)中的應(yīng)用
        隊列里的小秘密
        基于多隊列切換的SDN擁塞控制*
        軟件(2020年3期)2020-04-20 00:58:44
        深刻理解物體的平衡
        人體體感感知機械手設(shè)計與實現(xiàn)
        電子制作(2019年13期)2020-01-14 03:15:20
        在隊列里
        我們是怎樣看到物體的
        非觸控式的體感機械臂交互控制系統(tǒng)研究
        電子制作(2017年13期)2017-12-15 09:00:05
        豐田加速駛?cè)胱詣玉{駛隊列
        體感語境下的交互行為設(shè)計
        无码人妻人妻经典| 白白在线免费观看视频| 亚洲自拍偷拍色图综合| 男人的天堂免费a级毛片无码| 欧美亚洲日韩国产人成在线播放| 国产人妻久久精品二区三区特黄| 亚洲av无码资源在线观看| 国产精品爽爽va在线观看网站| AV中文码一区二区三区| 内射中出后入内射极品女神视频| 天天色天天操天天日天天射| 色婷婷亚洲一区二区三区| 久久亚洲sm情趣捆绑调教| 国产美女自拍国语对白| 亚洲美女毛片在线视频| 日本黄网站三级三级三级| 中文字幕无码家庭乱欲| 国产自产c区| 中文字幕中文字幕三区| 不卡的高清av一区二区三区| 精品无码久久久久久国产| 国品精品一区二区在线观看| 精品奇米国产一区二区三区| 亚洲人成网站在线播放2019| 午夜福利院电影| 亚洲精品国产一二三无码AV| 亚洲一区亚洲二区中文字幕| 国产亚洲超级97免费视频| 蜜臀av性久久久久蜜臀aⅴ| 亚洲AV色无码乱码在线观看| 国产亚洲午夜高清国产拍精品不卡 | 国产一级内射视频在线观看| 亚洲av永久无码国产精品久久| 亚洲国产成人91| 黄色录像成人播放免费99网| 亚洲中文字幕乱码一二三| 成人丝袜激情一区二区| 内射少妇36p亚洲区| 97色伦图片97综合影院久久| 99在线无码精品秘 入口九色| 校园春色日韩高清一区二区|