遊戲資源打包方法總結

2021-08-22 06:53:25 字數 1666 閱讀 2252

首先,定義兩個名詞。

block :打包資料的單位,可以是乙個檔案也可以是乙個資料塊。總之是資源包中的一塊資料。

包,資源包:即包含多份資料的乙個檔案。

1block size + block data

按資料塊大小+資料塊內容的方式將一批資料塊逐個打包。這是比較簡單實用的方法。往往還需要生成乙個文字檔案指明每個資料塊是什麼內容。如果按照預設順序打包和讀取就不需要了。

這種方法主要用於包中的資料需要全部同時讀出的情況。因為這種格式的包,從中間單獨抽取某個資料塊讀出比較麻煩。只能跳過若干資料塊。

2offset table + block datas

這種方式下,首先在包頭部寫入乙個offset table,即每個資料塊在包中的起始位置。然後將所有資料塊的內容逐個寫入包中。這個offset table條目數一般比block數大1,這樣

table[0]=0

table[1]=block 0 size

table[2]=block 1 size + table[1]

table[3]=block 2 size + table[2]

......

table[n]=block n-1 size + table[n-1]

(block從0開始計數,共n個[0,n-1])

讀取的時候,根據block id,先在table中查到table[id]和table[id+1], 兩者之差就是block size.table[id]是block位址。

當然也需要乙個配套的文字檔案記錄每個block id對應的內容。

這種方式的好處是可以只讀出需要的內容。且table所佔的容量只比第一種方式稍大。是非常實用的方式。

3trunk 方式

首先定義trunk:block id + blocksize + block data

只比第一種方式多了乙個block id。但靈活性提高了。因為可以根據id判斷當前的block是否是需要載入的。如果是就載入否則跳過這個block接著看下乙個block,直到找到或沒找到需要載入的block。block id不但可以指明資料塊在同類資料中的id,而且可以指明是哪一種資源,這樣就可以把不同種類的資源打包到一起。當然在前面的方式中可以在資料塊中包含資源型別,但靈活性就差了,特別是必須在所有型別的資料塊中統一寫一些資料在相同位置來表示資源型別。而在trunk方式中,只要在block id中取一些位來定義資源型別,然後根據資源型別呼叫不同型別的載入函式去讀取資料是相當靈活的。trunk方式的缺點是讀取速度稍慢,因為必須乙個個找過去。

4file name 索引方式

不知道除了我有沒有人用過這種方式,這是一種偷懶的方式。打包物件是檔案。先在包頭部寫入乙個檔名和offset 對映表。檔名按字串寫入包中,所以這之前要寫入檔名的位元組數。

對映表的結構為: 檔名位元組數+檔名字串+檔案offset

當然檔名必須用ascii編碼。這兒還有個變通的方式。你可以用utf-8格式的編碼,就不需要寫檔名自己數了。

對映表之後就按順序寫入檔案。

這種方式其實是offset table 方式的一種變體。不同的是直接將檔名寫入包中。讀取時可以指定檔名從包中讀出,根從永續性裝置上讀單個檔案的感覺一樣。不必再定義額外的檔案檔案表明每個資料塊的含義了。所以是一種比較懶的方式。缺點是浪費容量。

小結:以上4種方式各有用處,用的最多的是offset table和trunk方式。此文需要持續補充更正完善

資源篇 資源打包

記錄打包工具開發流程,探尋最簡單的打包方法。打包的過程一般分為兩步 設定標籤名稱也就是assetbundle的名稱 使用unity的api打包 是不是很簡單,是的,接下來我們來看看具體怎麼實現?先說設定assetbundle裡面的名稱 打包的時候,只會打包已經設定過assetbundle標籤的資源,...

vue專案靜態資源打包方法

如何用.npm run build打包靜態資源 1.開啟build資料夾下的webpack.base.conf.js,如下圖,將紅圈地方改為紅箭頭所指的一行 2.開啟config資料夾下index.js如下圖,將藍箭頭所指改為紅箭頭所指 3.開啟build資料夾下的utils.js如下圖,將圈出的 ...

Unity資源打包 打包分析

遊戲立項中重要的一件事就是制定資源存放規則 資源使用規則,然後再談打包規則。較好的分類是乙個清晰 清爽愉悅的工作流,策劃 美術 程式之間溝通 使用更加方便快捷。存放規則根據團隊 個人喜好制定即可 1.1 分類 分類放置後,需要使用。unity的資源如何使用,涉及到如何打包以及如何載入的問題。使用pr...