• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

      2021-03-24 08:22:04彭偉國栗昊
      現(xiàn)代計算機 2021年3期
      關(guān)鍵詞:槍械藏品按鈕

      彭偉國,栗昊

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

      0 引言

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

      1 項目策劃

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

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

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

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

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

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

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

      3 項目功能設(shè)計

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

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

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

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

      圖1 AR識圖功能類圖

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

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

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

      圖2 資源加載功能類圖

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

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

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

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

      圖3 藏品展示功能類圖

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

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

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

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

      圖4 AR識圖功能效果圖

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

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

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

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

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

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

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

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

      5 結(jié)語

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

      圖5 藏品展示功能效果圖

      猜你喜歡
      槍械藏品按鈕
      哪個是門鈴真正的按鈕
      小讀者手繪槍械
      輕兵器(2024年1期)2024-02-01 16:09:28
      當(dāng)你面前有個按鈕
      槍械圖鑒——VKS狙擊步槍
      槍械圖鑒——TS12霰彈槍
      抱樸齋藏品
      李杰森藏品
      譚禮藏品
      槍械的“外掛神器”
      羅妍妍藏品欣賞
      寶藏(2017年11期)2018-01-03 06:46:09
      巫溪县| 洱源县| 吉首市| 余姚市| 定远县| 康乐县| 宝鸡市| 永新县| 云阳县| 琼中| 肇东市| 苍山县| 甘孜县| 大城县| 浏阳市| 桂林市| 改则县| 环江| 页游| 孝义市| 通化市| 沅陵县| 青川县| 南溪县| 金沙县| 荔波县| 泸州市| 肇庆市| 郧西县| 新干县| 清新县| 红安县| 孟州市| 太仓市| 互助| 白水县| 贵阳市| 龙口市| 邢台县| 剑阁县| 崇仁县|