国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

三維虛擬數(shù)字校園系統(tǒng)的資源封包設(shè)計(jì)

2014-12-03 05:05馬瑞安徽電子信息職業(yè)技術(shù)學(xué)院軟件學(xué)院安徽蚌埠233030
關(guān)鍵詞:封包預(yù)置腳本

馬瑞 (安徽電子信息職業(yè)技術(shù)學(xué)院軟件學(xué)院,安徽 蚌埠233030)

三維虛擬技術(shù)的應(yīng)用將會(huì)越來(lái)越廣泛,其中采用Unity3D技術(shù)開(kāi)發(fā)的三維虛擬系統(tǒng)具有模型可視化、虛擬與現(xiàn)實(shí)交互、實(shí)時(shí)更新虛擬模型和支持多平臺(tái)等優(yōu)點(diǎn),是目前眾多三維虛擬設(shè)計(jì)軟件中開(kāi)源代碼及功能應(yīng)用全面的三維虛擬引擎[1-2]。通常情況下,虛擬系統(tǒng)在Web服務(wù)器端發(fā)布,設(shè)計(jì)人員將系統(tǒng)中所有資源存放在Web服務(wù)器供用戶使用。用戶在使用系統(tǒng)時(shí)將所需要的系統(tǒng)資源文件全部下載完畢后,軟件才能動(dòng)態(tài)的加載并創(chuàng)建系統(tǒng)里的場(chǎng)景和角色等對(duì)象,然后才能動(dòng)態(tài)的將腳本綁定在虛擬數(shù)字對(duì)象上,動(dòng)態(tài)地將貼圖賦予虛擬數(shù)字對(duì)象,必須動(dòng)態(tài)地完成各種加載操作之后系統(tǒng)才能有效的運(yùn)行,這樣會(huì)大大影響用戶從系統(tǒng)服務(wù)器中得到響應(yīng)的時(shí)間以及在用戶端系統(tǒng)動(dòng)態(tài)運(yùn)行的效率。為此,筆者利用Unity3D提供的Prefab和Assetbundle功能對(duì)系統(tǒng)里的模型資源、UI資源進(jìn)行預(yù)置、封包和解包,當(dāng)從服務(wù)器上將先預(yù)置后封包的Assetbundle文件下載后直接實(shí)例化,再放入到三維虛擬數(shù)字校園系統(tǒng)中,這樣可以有效提高系統(tǒng)在Web用戶端的運(yùn)行效率。

1 移動(dòng)平臺(tái)封包

預(yù)置是Unity3D中提供給設(shè)計(jì)人員的一種資源類型,其是存儲(chǔ)在項(xiàng)目視圖中的一種可重復(fù)使用的三維模型資源對(duì)象[3]。預(yù)置可以重復(fù)多次地載入到多個(gè)不同場(chǎng)景中,當(dāng)場(chǎng)景中載入了一個(gè)預(yù)置對(duì)象,系統(tǒng)就會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的實(shí)例,且所有預(yù)置實(shí)例都鏈接到原始預(yù)置本身,也就是說(shuō)預(yù)置實(shí)例都是預(yù)置本身的克隆。不管項(xiàng)目存在多少實(shí)例,當(dāng)對(duì)預(yù)置進(jìn)行任何更改,將會(huì)看到這些更改都會(huì)被應(yīng)用到該預(yù)置對(duì)象的所有實(shí)例中。一般情況下,預(yù)置封包時(shí)占用很少的存儲(chǔ)空間(不超過(guò)1KB)。在實(shí)際開(kāi)發(fā)過(guò)程中,預(yù)置對(duì)象會(huì)關(guān)聯(lián)模型、特效、界面、聲音、場(chǎng)景和腳本等資源,關(guān)聯(lián)上述資源后,預(yù)置對(duì)象的存儲(chǔ)就會(huì)隨著變大,因而在系統(tǒng)設(shè)計(jì)過(guò)程中應(yīng)盡量減少預(yù)置對(duì)象的重復(fù)關(guān)聯(lián),由此減少系統(tǒng)消耗的內(nèi)存資源[4]。

一般情況下,設(shè)計(jì)人員會(huì)把腳本文件綁定到預(yù)置對(duì)象上,然后再進(jìn)行資源封包,但是移動(dòng)平臺(tái)不支持腳本更新,如將JumpTest.js這條測(cè)試腳本綁定在預(yù)置中,系統(tǒng)移動(dòng)平臺(tái)通過(guò)服務(wù)器下載該封包,再載入到工程中會(huì)發(fā)生JumpTest.js測(cè)試腳本不能被正常加載和執(zhí)行的現(xiàn)象[5]。在實(shí)際系統(tǒng)中,存在需要大量的動(dòng)態(tài)加載和執(zhí)行腳本文件的需求,為了滿足上述需要,可以在腳本中添加Public變量,通過(guò)Inspector腳本中的Public參數(shù)實(shí)現(xiàn)腳本更新。如果本地包含JumpTest.js腳本,系統(tǒng)將把該腳本綁定在從服務(wù)器端下載的預(yù)置中并且被執(zhí)行,但是當(dāng)本地工程文件中沒(méi)有JumpTest.js腳本文件時(shí),那么從服務(wù)器端下載的預(yù)置中的腳本文件將永遠(yuǎn)不被執(zhí)行。因此,應(yīng)通過(guò)在腳本文件中添加Public變量,以及對(duì)Public變量參數(shù)的修改來(lái)實(shí)現(xiàn)移動(dòng)平臺(tái)的腳本更新。

2 場(chǎng)景資源封包

場(chǎng)景需要保存模型及該模型文件的相關(guān)文件和坐標(biāo)信息,并且烘培該場(chǎng)景的光信。由于烘培不能被重新加載,因此只能烘焙場(chǎng)景特有模型,被多場(chǎng)景共用的模型必須動(dòng)態(tài)加載。由于場(chǎng)景中存在很多公用模型,因而如何設(shè)計(jì)封裝規(guī)則封包場(chǎng)景資源就顯得尤為重要[6]。封包場(chǎng)景資源占用內(nèi)存的大?。焦媚P偷拇笮 翀?chǎng)景的個(gè)數(shù)的大小,這表明場(chǎng)景資源封包會(huì)重復(fù)占用大量的內(nèi)存資源。通過(guò)研究場(chǎng)景封包的策略,首先烘培整個(gè)場(chǎng)景,然后丟掉其中的公共模型,只保留特有的模型。采用XML文件記錄被丟掉的公共模型在場(chǎng)景中的坐標(biāo)數(shù)據(jù),最后將其封包在不同的封包文件中(見(jiàn)圖1)。

由于系統(tǒng)中公共資源的封包被加載的次數(shù)更多,因此該封包被設(shè)計(jì)成在內(nèi)存中常駐。系統(tǒng)場(chǎng)景封包的執(zhí)行過(guò)程設(shè)計(jì)為,首先系統(tǒng)下載場(chǎng)景的封包,然后依據(jù)場(chǎng)景封包文件中的XML文檔的坐標(biāo)信息,從內(nèi)存中調(diào)用常駐的公共資源封包動(dòng)態(tài)地再加載到場(chǎng)景中,最終實(shí)現(xiàn)整個(gè)場(chǎng)景的加載。

圖1 公共資源與多場(chǎng)景封包架構(gòu)圖

3 自動(dòng)封包設(shè)計(jì)

通常情況下,系統(tǒng)封包都是由設(shè)計(jì)人員根據(jù)系統(tǒng)規(guī)劃,人工判斷每個(gè)場(chǎng)景中哪些是其特有資源,哪些是和其他場(chǎng)景共用資源,上述處理方式效率低且容易出錯(cuò)。為此,設(shè)計(jì)一種自動(dòng)封包方法,設(shè)計(jì)程序?qū)λ袌?chǎng)景進(jìn)行遍歷,記錄資源的被使用信息,判斷哪些資源被場(chǎng)景封包,哪些資源獨(dú)立封包,最終完成系統(tǒng)資源的封包工作。

4 讀取封包

由于Assetbundle封包可以同時(shí)放在服務(wù)器或者本地,并且下載讀取的方式完全一樣,因而設(shè)計(jì)人員可以在系統(tǒng)開(kāi)發(fā)階段把資源封包建設(shè)在本地,當(dāng)系統(tǒng)完成前期測(cè)試后再把資源封包上傳到服務(wù)器上進(jìn)行公共測(cè)試,這樣有利于系統(tǒng)在公共測(cè)試和發(fā)布后的不斷更新[7]。

讀取封包(WWW bundle=new WWW(path);WWW.LoadFromCacheOrDownload(path,5))分為2種方式:方式1是bundle只能保存在內(nèi)存中,一旦退出系統(tǒng)再進(jìn)入還得重新下載,因而該方式不適用;方式2是將Unity3D下載Assetbundle到本地中,其原理是通過(guò)版本號(hào)和下載地址在本地尋找是否有該Assetbundle,如果有則直接返回對(duì)象,如果沒(méi)有則根據(jù)下載地址重新從服務(wù)器或者本地下載。

5 測(cè)試效果

利用專業(yè)Unity3D性能測(cè)試工具Profiler測(cè)試系統(tǒng),得到未采用封包策略的系統(tǒng)運(yùn)行內(nèi)存測(cè)試數(shù)據(jù)如圖2所示,而采用封包策略后的系統(tǒng)運(yùn)行內(nèi)存測(cè)試數(shù)據(jù)如圖3所示。比較圖2和圖3可知,未來(lái)用封包策略占用的內(nèi)存資源數(shù)據(jù)為0.52GB,而采用封包策略占用的內(nèi)存資源數(shù)據(jù)為386.5MB,表明采用封包策略后系統(tǒng)占內(nèi)存空間明顯減少,因而系統(tǒng)在客戶端的運(yùn)行效率更高。

6 結(jié)語(yǔ)

采用Unity3D提供的Prafab及Assetbundle對(duì)三維虛擬數(shù)字校園系統(tǒng)的模型文件進(jìn)行預(yù)置和封包,并采用公共模型Assetbundle單獨(dú)封包,這樣可以有效減少常駐內(nèi)存的模型文件數(shù)量,從而起到提高系統(tǒng)運(yùn)行及數(shù)據(jù)再次加載的效率。今后,對(duì)基于Unity3D的三維虛擬數(shù)字校園系統(tǒng)來(lái)說(shuō),如何提高客戶端的下載速度、場(chǎng)景在客戶端加載的效率及系統(tǒng)在客戶端運(yùn)行的效率和穩(wěn)定性,需要進(jìn)一步加以研究并使之完善。

圖2 未采用封包策略的內(nèi)存測(cè)試數(shù)據(jù)圖

圖3 采用封包策略的內(nèi)存測(cè)試數(shù)據(jù)圖

[1] 王星捷,李春花 .基于Unity3D平臺(tái)的三維虛擬城市研究與應(yīng)用 [J].計(jì)算機(jī)技術(shù)與發(fā)展,2013(4):241-244.

[2] 李保杰,于法展,李戰(zhàn)成 .基于OpenGL虛擬校園漫游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [J].蘇州科技學(xué)院學(xué)報(bào),2006,22(19):45-48.

[3] 朱慧娟 .基于Unity3D的虛擬漫游系統(tǒng) [J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(10):36-39,65.

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

[5] 鄒靜 .迎接互聯(lián)網(wǎng)的明天——玩轉(zhuǎn)3Dweb[M].北京:電子工業(yè)出版社,2011.

[6] Ramasundaram V,Grunwald S,Mangeot A,et al.Development of an environmental virtual field laboratory [J].Computers &Education,2005,45(1):21-34.

[7] Mac E,Cai G,Sharma R.Enabling collaborative geoinformation access and decision-making through a natura,multimodal interface [J].International Journal of Geographical Information Science,2005,19(3):267-292.

猜你喜歡
封包預(yù)置腳本
酒駕
中藥封包在急診老年急性胃腸炎患者中的臨床應(yīng)用
基于排隊(duì)論的水下預(yù)置反艦導(dǎo)彈部署優(yōu)化
安奇奇與小cool 龍(第二回)
護(hù)膚 巧用保鮮膜
無(wú)沖突規(guī)則校園網(wǎng)絡(luò)安全系統(tǒng)的設(shè)計(jì)
快樂(lè)假期
小編的新年愿望
多級(jí)網(wǎng)絡(luò)物資預(yù)置—前送模型及改進(jìn)布谷鳥(niǎo)搜索算法研究
混料設(shè)計(jì)在6061鋁合金激光焊預(yù)置Al-Si-Ni粉末中的應(yīng)用