999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Unity 的《AR 槍械》的設(shè)計(jì)與實(shí)現(xiàn)

2021-03-24 08:22:04彭偉國(guó)栗昊
現(xiàn)代計(jì)算機(jī) 2021年3期
關(guān)鍵詞:按鈕用戶功能

彭偉國(guó),栗昊

(平頂山學(xué)院計(jì)算機(jī)學(xué)院(軟件學(xué)院),平頂山467000)

0 引言

隨著智能手機(jī)的普及,人們通過(guò)手機(jī)圖片和視頻去觀察了解事物,但是不能從三維視角下觀看物體的方方面面。AR 的優(yōu)勢(shì)就在于能夠把原本在現(xiàn)實(shí)物理世界中難以體驗(yàn)到的真實(shí)的感官信息,通過(guò)科學(xué)技術(shù)模擬仿真后再疊加到現(xiàn)實(shí)世界被人類感官所感知,從而達(dá)到超越現(xiàn)實(shí)的感官體驗(yàn)[1]。而AR 技術(shù)的這一優(yōu)勢(shì)能幫助人們?cè)谔搶?shí)結(jié)合的場(chǎng)景中有更好的交互體驗(yàn)。槍械并不是每個(gè)人都能接觸到的物品,但又有很多人對(duì)槍械特別感興趣。眾多人的愛(ài)好需求和社會(huì)現(xiàn)狀出現(xiàn)了矛盾,《AR 槍械》通過(guò)增強(qiáng)現(xiàn)實(shí)技術(shù),將真實(shí)的環(huán)境和虛擬的物體實(shí)時(shí)地疊加到了同一個(gè)畫(huà)面或空間。AR 技術(shù)使真實(shí)場(chǎng)景與虛擬物體無(wú)縫對(duì)接,通過(guò)《AR 槍械》這一科普軟件,用戶能夠以立體真實(shí)的視角,增強(qiáng)用戶對(duì)槍械知識(shí)的學(xué)習(xí)興趣,了解槍械科技的發(fā)展。

1 項(xiàng)目策劃

《AR 槍械》能夠讓用戶通過(guò)掃描槍械平面識(shí)別圖來(lái)觀察三維的槍械模型,并且會(huì)出現(xiàn)槍械數(shù)據(jù)和槍械歷史,用戶可以通過(guò)閱讀屏幕上的內(nèi)容來(lái)了解所掃描的槍械的數(shù)據(jù)及歷史。并且三維槍械模型出現(xiàn)后,用戶可以通過(guò)滑動(dòng)屏幕旋轉(zhuǎn)模型,滿足用戶全方位觀察槍械的需求。

啟動(dòng)AR 程序,用戶能夠看到開(kāi)始識(shí)圖、藏品、項(xiàng)目設(shè)置、項(xiàng)目幫助和退出項(xiàng)目等五個(gè)按鈕。用戶點(diǎn)擊開(kāi)始識(shí)圖,項(xiàng)目會(huì)跳轉(zhuǎn)到識(shí)圖界面,用戶通過(guò)槍械識(shí)別圖獲取該槍械的三維模型。通過(guò)單個(gè)手指在手機(jī)屏幕上下左右滑動(dòng)控制模型上下左右旋轉(zhuǎn)。當(dāng)兩個(gè)手指間的距離變小時(shí)模型縮小,當(dāng)距離變大時(shí)模型放大。用戶可通過(guò)數(shù)據(jù)和歷史按鈕來(lái)查看該槍械的相關(guān)數(shù)據(jù)和歷史介紹。用戶也可選擇截圖、收藏和退出等功能。

用戶點(diǎn)擊藏品按鈕,項(xiàng)目會(huì)進(jìn)入到藏品界面,在藏品界面用戶可查看槍械藏品的三維模型及該槍械的槍械數(shù)據(jù)和槍械歷史,用戶也可選擇取消收藏該槍械。通過(guò)設(shè)置按鈕可跳轉(zhuǎn)到設(shè)置界面,用戶可以通過(guò)滑條控制項(xiàng)目音效大小。通過(guò)射擊體驗(yàn)按鈕可跳轉(zhuǎn)到射擊體驗(yàn)場(chǎng)景,可以使用自己選擇的槍進(jìn)行射擊體驗(yàn)。通過(guò)項(xiàng)目幫助按鈕可跳轉(zhuǎn)到項(xiàng)目操作介紹界面,用戶點(diǎn)擊退出按鈕,退出項(xiàng)目界面。

2 項(xiàng)目實(shí)現(xiàn)技術(shù)

《AR 槍械》應(yīng)用程序主要運(yùn)用Unity3D 游戲引擎、Vuforia 軟件開(kāi)發(fā)工具包和C#腳本語(yǔ)言進(jìn)行開(kāi)發(fā),項(xiàng)目UI 主要運(yùn)用Photoshop 和Unity 軟件進(jìn)行制作,項(xiàng)目中的槍械3D 模型主要運(yùn)用Maya 軟件進(jìn)行建模。《AR 槍械》在項(xiàng)目策劃的基礎(chǔ)上,首先完成了槍械3D 模型、項(xiàng)目UI 等設(shè)計(jì)工作,然后進(jìn)行AR 識(shí)圖、槍械收藏、資源加載、截圖、藏品展示、項(xiàng)目幫助、項(xiàng)目設(shè)置、射擊體驗(yàn)等功能的開(kāi)發(fā)。項(xiàng)目中的槍械數(shù)據(jù)使用JSON 進(jìn)行存儲(chǔ)。項(xiàng)目模塊間采用了單例模式進(jìn)行通信。

項(xiàng)目資源準(zhǔn)備方面,除了模型、UI 效果圖之外,實(shí)現(xiàn)AR 槍械的關(guān)鍵一環(huán)就是識(shí)別圖的制作了。

首先,在Maya 中渲染出槍械模型的正視圖,保存其位置,作為AR 槍械模型的渲染圖;然后,在Vuforia的官網(wǎng)(https://developer.vuforia.com/)注冊(cè)并登錄賬號(hào),通過(guò)官網(wǎng)Add Database 按鈕創(chuàng)建槍械數(shù)據(jù)庫(kù)Firearms?Database;最后,在數(shù)據(jù)庫(kù)界面點(diǎn)擊Add Target 按鈕,選取制作的渲染圖,完成一個(gè)識(shí)別圖的添加。重復(fù)前面步驟,添加其他槍械識(shí)別圖,完成識(shí)別圖數(shù)據(jù)庫(kù)的創(chuàng)建。

3 項(xiàng)目功能設(shè)計(jì)

在軟件系統(tǒng)開(kāi)發(fā)過(guò)程中,類圖設(shè)計(jì)起到承上啟下的作用,對(duì)上是用例分析的結(jié)果,對(duì)下是系統(tǒng)代碼設(shè)計(jì)的藍(lán)本[2]。類圖也是描述系統(tǒng)詳細(xì)功能設(shè)計(jì)的有效方式之一,能夠描述系統(tǒng)設(shè)計(jì)中類與類之間的聯(lián)系,也能夠?qū)︻惖膬?nèi)部構(gòu)成加以說(shuō)明[3]。AR 識(shí)圖、資源加載、藏品展示是整個(gè)項(xiàng)目里面最核心的幾個(gè)功能,在進(jìn)行項(xiàng)目開(kāi)發(fā)的初期,首先要完成各個(gè)功能模塊的類圖設(shè)計(jì)。

3.1 AR識(shí)圖功能設(shè)計(jì)

AR 槍械軟件啟動(dòng)后,當(dāng)用戶點(diǎn)擊應(yīng)用軟件上的識(shí)圖功能,打開(kāi)相機(jī),相機(jī)對(duì)準(zhǔn)識(shí)別圖進(jìn)行識(shí)別,根據(jù)不同的槍械識(shí)別圖,用戶能識(shí)別出不同的槍械模型,并對(duì)識(shí)別出的模型進(jìn)行放大縮小和旋轉(zhuǎn)操作。

AR 識(shí)圖類圖如圖1 所示,類GameManger 和類MyDefaultTrackableEventHandler 之間是依賴關(guān)系。設(shè)計(jì)單例類GameManger 儲(chǔ)存識(shí)別的槍械的名字,在該類中設(shè)計(jì)string 類型name 字段儲(chǔ)存槍械名稱,設(shè)計(jì)方法SetFirearmsName()獲取槍械名稱。設(shè)計(jì)類MyDefault?TrackableEventHandler 解析識(shí)別圖數(shù)據(jù)庫(kù)以及實(shí)現(xiàn)模型的加載,在該類中設(shè)計(jì)GameObject 類型的pregabs儲(chǔ)存槍械模型資源,設(shè)計(jì)方法OnTrackingFound()加載模型,設(shè)計(jì)方法OnTrackingLost()刪除模型。

圖1 AR識(shí)圖功能類圖

3.2 資源加載功能設(shè)計(jì)

當(dāng)用戶掃描槍械識(shí)別圖時(shí),加載對(duì)應(yīng)的槍械模型,當(dāng)用戶點(diǎn)擊菜單欄中的數(shù)據(jù)按鈕時(shí)會(huì)加載并顯示當(dāng)前槍械的數(shù)據(jù);當(dāng)用戶點(diǎn)擊菜單欄中的歷史按鈕時(shí)會(huì)加載并顯示當(dāng)前槍械的歷史信息。

資源加載類圖如圖2 所示,資源加載功能有關(guān)類的設(shè)計(jì)如下:類CollectionUIManager 和類UIManager 都與類InventoryManager 存在依賴關(guān)系,類InventoryMan?ager 和類Firearms 組合關(guān)系。設(shè)計(jì)類InventoryManager通過(guò)JsonLoadFirearms()方法實(shí)現(xiàn)對(duì)Item.Json 文件的解析,解析槍的數(shù)據(jù)、歷史和槍械模型Prefab。類Col?lectionUIManager 和類UIManager 實(shí)現(xiàn)對(duì)類Inventory?Manager 解析的槍的數(shù)據(jù)、歷史和槍械模型Prefab 加載到相應(yīng)位置。設(shè)計(jì)類UIManager,在該類中設(shè)計(jì)方法DataButtonClick()和HistoryButtonClick()實(shí)現(xiàn)在識(shí)圖場(chǎng)景當(dāng)用戶點(diǎn)擊數(shù)據(jù)或者歷史按鈕時(shí),顯示對(duì)應(yīng)的數(shù)據(jù)。

圖2 資源加載功能類圖

3.3 藏品展示功能設(shè)計(jì)

藏品展示功能為了滿足藏品場(chǎng)景的互動(dòng)性和簡(jiǎn)潔性進(jìn)行單獨(dú)設(shè)計(jì),當(dāng)用戶點(diǎn)擊主界面的藏品按鈕,進(jìn)入藏品界面,在藏品界面的右邊是收藏的槍械列表,左邊是槍械的數(shù)據(jù)以及歷史,中間是槍械模型,用戶能滑動(dòng)中間屏幕旋轉(zhuǎn)、放大和縮小槍械模型,也能滑動(dòng)歷史Panel 查看完整的歷史介紹。當(dāng)用戶點(diǎn)擊藏品列表的槍械時(shí),在對(duì)應(yīng)位置顯示所點(diǎn)擊槍械的模型、數(shù)據(jù)以及歷史。

藏品展示功能類的設(shè)計(jì)如下:類CollectionUIMan?ager 和類InventoryManager 之間是依賴關(guān)系,類Inven?toryManager 和類Firearms 之間是組合關(guān)系。在類Col?lectionUIManager 中設(shè)計(jì)方法Init()實(shí)現(xiàn)控制藏品場(chǎng)景中槍械列表的刷新;對(duì)類InventoryManager 解析的槍的數(shù)據(jù)、歷史和槍械模型Prefab 加載到相應(yīng)位置,設(shè)計(jì)方法CollectionButtonClickTo()實(shí)現(xiàn)當(dāng)用戶點(diǎn)擊槍械列表中的槍械圖標(biāo)時(shí),加載對(duì)應(yīng)槍械的數(shù)據(jù)、歷史和槍械模型Prefab。類Firearms 用來(lái)存放槍械對(duì)象,在類Inven?toryManager 中設(shè)計(jì)方法JsonLoadFirearms()解析的槍械數(shù)據(jù),槍械數(shù)據(jù)都是按照類Firearms 對(duì)象的狀態(tài)儲(chǔ)存在內(nèi)存中,方便查找。

藏品展示功能的類圖設(shè)計(jì)如圖3 所示。

圖3 藏品展示功能類圖

4 項(xiàng)目功能實(shí)現(xiàn)

4.1 AR識(shí)圖功能實(shí)現(xiàn)

在SampleScene 場(chǎng)景的Hierarchy 面板中鼠標(biāo)右鍵創(chuàng)建Vuforia Engine Image,并在該Image 的Inspector面板中點(diǎn)擊選擇Image TargetBehavior 中的Type 為Predefined,Database 為FirearmsDatabase,ImageTarge為槍械中的一個(gè),并將Image 的名稱改為選擇的Imag?eTarge 的名稱一致。重復(fù)上述步驟完成所有槍械Im?age 的制作。

為所有Image 槍械添加MyDafaultTrackableEven?tHandler 腳本,在這個(gè)腳本中編寫(xiě)名字為OnTrack?ableStateChanged()方法,當(dāng)程序運(yùn)行時(shí)通過(guò)該方法中的Stattus 屬性去解析識(shí)別到的圖片是否是當(dāng)前Image圖片,如果不是繼續(xù)識(shí)別,如果是當(dāng)前圖片將調(diào)用名字為OnTrackingFound()方法將該槍械模型加載到內(nèi)存中,通過(guò)GameObject 類型的gameobj 去索引模型,通過(guò)Instantiate 方法將gameobj 加載到場(chǎng)景中,完成對(duì)應(yīng)槍械模型的加載,實(shí)現(xiàn)識(shí)圖功能。AR 識(shí)圖功能效果圖如圖4 所示。

圖4 AR識(shí)圖功能效果圖

4.2 資源加載功能實(shí)現(xiàn)

在項(xiàng)目場(chǎng)景的Hirerarchy 面板創(chuàng)建空物體,創(chuàng)建InventoryManager 的腳本并加載在空物體上,通過(guò)腳本中的JsonLoadFirearms 方法,以文件讀寫(xiě)的方式讀入Items.Json 文件中槍械編號(hào)、槍械名稱、槍械收藏狀態(tài)、槍械歷史、槍械重量等槍械資源。通過(guò)firearmsList 列表存儲(chǔ)JSON 解析的全部槍械數(shù)據(jù),然后通過(guò)GetFire?armsState()方法獲取某個(gè)槍械的所有數(shù)據(jù)。

在識(shí)圖場(chǎng)景,當(dāng)用戶識(shí)別槍械后,用戶點(diǎn)擊菜單欄中的數(shù)據(jù)按鈕,該按鈕通過(guò)監(jiān)聽(tīng)事件通過(guò)MainMe?nuButtonClick()方法通過(guò)GameManager 類獲取當(dāng)前槍械的名稱name 字段,在通過(guò)DataButtonClick()方法將槍械名字name 發(fā)送給InventoryManager 類的GetFire?armsText 方法,該方法將返回一個(gè)Firearms 對(duì)象,該對(duì)象存儲(chǔ)著當(dāng)前槍械的數(shù)據(jù)信息,獲當(dāng)前數(shù)據(jù)后,將槍械數(shù)據(jù)發(fā)送給Datapanel 面板寫(xiě)的DataText 的Text 文本,將數(shù)據(jù)顯示在屏幕上;當(dāng)用戶點(diǎn)擊HistoryButtonClick按鈕時(shí),重復(fù)數(shù)據(jù)按鈕方法,將槍械歷史顯示在屏幕上。

4.3 藏品展示功能實(shí)現(xiàn)

藏品展示功能的實(shí)現(xiàn)效果圖如圖5 所示,該功能的實(shí)現(xiàn)步驟如下:

(1)給藏品場(chǎng)景中的Canvas 掛在CollectionUIMan?ager 腳本,當(dāng)場(chǎng)景運(yùn)行時(shí),該腳本將通過(guò)Init 方法獲取場(chǎng)景中的藏品展示列表CollectionPanel 以及面板下的所用子物體。

(2)在場(chǎng)景中的Hirerarchy 面板中創(chuàng)建一個(gè)空物體,命名為InventoryManager,再掛載InventoryManager腳本,當(dāng)場(chǎng)景運(yùn)行時(shí),該腳本將運(yùn)行腳本中的JsonLoad?Firearms()方法,將Items.Json 文件中的數(shù)據(jù)讀入Fire?List 列表中。Items.Json 文件中通過(guò)State 存儲(chǔ)槍械的狀態(tài),通過(guò)查看FireList[n].state 的值來(lái)確定槍械是否收藏。

(3)在場(chǎng)景中類CollectionUIManager 通過(guò)UpdateS?ceneCollectionFirearmsList()方法將從InventoryManager類的GetCollectionNameList()方法中獲取的收藏中的槍械名稱存儲(chǔ)TextList 列表內(nèi),并依次在CollectionPan?el 通過(guò)Init()方法將槍械名稱加載到藏品列表中,在屏幕上顯示。根據(jù)當(dāng)前列表中槍械名稱,通過(guò)Resource.load()方法將槍械對(duì)應(yīng)的圖片,從Resource 文件夾內(nèi)加載到列表中。

5 結(jié)語(yǔ)

AR 槍械這款應(yīng)用程序,用戶通過(guò)手機(jī)掃描槍械識(shí)別圖,識(shí)別出槍械模型;用戶通過(guò)資源加載功能讀寫(xiě)槍械配置資源,以在UI 界面顯示槍械數(shù)據(jù)信息和歷史信息;用戶通過(guò)藏品展示功能,收藏喜愛(ài)的槍械。另外,用戶還可以運(yùn)用槍械模型進(jìn)行射擊體驗(yàn),享受射擊的快樂(lè)。

圖5 藏品展示功能效果圖

猜你喜歡
按鈕用戶功能
這些按鈕能隨便按嗎?
也談詩(shī)的“功能”
當(dāng)你面前有個(gè)按鈕
關(guān)于非首都功能疏解的幾點(diǎn)思考
關(guān)注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關(guān)注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關(guān)注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
內(nèi)心不能碰的按鈕
如何獲取一億海外用戶
中西醫(yī)結(jié)合治療甲狀腺功能亢進(jìn)癥31例
主站蜘蛛池模板: 国产福利2021最新在线观看| 久久香蕉国产线看观看式| 国产精品美人久久久久久AV| 国产精品久久久久久久久久久久| 老司机久久99久久精品播放| 日韩av无码DVD| 666精品国产精品亚洲| 国产91高清视频| 亚洲成人在线免费| 97人人模人人爽人人喊小说| 一级成人a毛片免费播放| 曰韩免费无码AV一区二区| 99国产精品一区二区| 国产女人在线视频| 中国特黄美女一级视频| 久久香蕉国产线| 97视频免费在线观看| 狠狠ⅴ日韩v欧美v天堂| 国产精品不卡片视频免费观看| 91久久偷偷做嫩草影院精品| 久久99久久无码毛片一区二区| 香蕉久久国产超碰青草| 欧美激情综合一区二区| 色综合天天操| 黄色污网站在线观看| 精品福利国产| 成年人福利视频| 日韩在线欧美在线| 香蕉网久久| 亚洲区视频在线观看| 在线不卡免费视频| 四虎精品黑人视频| 又粗又硬又大又爽免费视频播放| 久久精品66| 另类综合视频| 亚洲精品无码AⅤ片青青在线观看| 日韩欧美国产精品| 中文字幕在线日本| 亚洲天堂网在线观看视频| 在线精品视频成人网| 超薄丝袜足j国产在线视频| 中文字幕天无码久久精品视频免费| 九九热在线视频| 亚洲欧美另类中文字幕| 国产日本欧美在线观看| 91精品国产综合久久不国产大片| 久热中文字幕在线| 99无码熟妇丰满人妻啪啪| a在线亚洲男人的天堂试看| 国产精品成人一区二区| 国产成人精品在线| 日韩 欧美 小说 综合网 另类| 国产网友愉拍精品| 日本道综合一本久久久88| 青草精品视频| 国产精品久久久久久久久kt| 538精品在线观看| 亚洲日韩高清无码| 精品在线免费播放| 免费视频在线2021入口| 久久99热这里只有精品免费看| 人妻无码中文字幕一区二区三区| YW尤物AV无码国产在线观看| 亚洲伊人天堂| 蜜芽国产尤物av尤物在线看| 亚洲欧美自拍一区| 国语少妇高潮| 欧美在线导航| 99精品福利视频| 狠狠色噜噜狠狠狠狠色综合久| 久久亚洲天堂| 老司机精品一区在线视频| 国产浮力第一页永久地址| 日韩在线视频网| 2021国产v亚洲v天堂无码| 69视频国产| 欧美性精品| 嫩草在线视频| 亚洲欧洲自拍拍偷午夜色| 日韩美毛片| 538国产视频| 亚洲欧美日韩成人在线|