一種三維動(dòng)畫引擎的資源打包方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)視頻游戲開發(fā)技術(shù),尤其涉及一種三維動(dòng)畫引擎的資源打包方法及裝置。
【背景技術(shù)】
[0002]Unity是由Unity Technologies開發(fā)的一個(gè)用于創(chuàng)建諸如三維視頻游戲、建筑可視化、實(shí)時(shí)三維動(dòng)畫等類型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開發(fā)工具,是一個(gè)全面整合的專業(yè)游戲引擎。
[0003]鑒于操作平臺(tái)和Unity自身的限制,Unity資源一般都通過打包為資源包(AssetBundle)的方式進(jìn)行動(dòng)態(tài)更新與加載。Unity資源指的是用于生成場景及場景中各種物體的元素,例如模型貼圖素材、場景源文件、插件等。Assetbundle是Unity Pro提供的功能,它可以把多個(gè)游戲?qū)ο蠡蛘哔Y源二進(jìn)制文件封裝到Assetbundle中,提供了封裝與解包的方法。
[0004]對(duì)于資源龐大的游戲來說,資源之間的各種依賴關(guān)系處理以及打包的時(shí)間消耗是個(gè)較大的難題,嚴(yán)重影響開發(fā)效率。
【發(fā)明內(nèi)容】
[0005]本申請(qǐng)?zhí)峁┝艘环N三維動(dòng)畫引擎的資源打包方法,可以避免重復(fù)的資源打包,縮短打包所需的時(shí)間。
[0006]本申請(qǐng)實(shí)施例提供的一種三維動(dòng)畫引擎的資源打包方法,包括:
[0007]A、讀取上次打包結(jié)束時(shí)保存的資源數(shù)據(jù)和打包信息,生成歷史資源數(shù)據(jù)列表和歷史打包信息列表;
[0008]B、對(duì)資源目錄進(jìn)行遍歷,記錄所有的原始游戲資源并收集本次的資源數(shù)據(jù)和打包信息;
[0009]C、比較本次的資源數(shù)據(jù)與歷史資源數(shù)據(jù)列表,以及比較本次的打包信息和歷史打包信息列表,分析哪些資源需要重新打包,生成重打包資源列表;
[0010]D、遍歷重打包資源列表,判斷其子資源是否已被打包,若是,則對(duì)該資源進(jìn)行打包,將該資源從重打包資源列表中刪除,并加入已打包列表,否則先跳過;如此循環(huán)遍歷直到重打包資源列表為空;
[0011]E、保存本次的資源數(shù)據(jù)和打包信息。
[0012]較佳地,步驟A中,若不存在上次打包結(jié)束時(shí)保存的資源數(shù)據(jù)和打包信息,則生成兩個(gè)對(duì)應(yīng)的空表。
[0013]較佳地,所述原始游戲資源包括:渲染器、貼圖、材質(zhì)、模型、動(dòng)畫、網(wǎng)格、預(yù)制件、場景或以上內(nèi)容的任意組合。
[0014]較佳地,所述資源數(shù)據(jù)包括:資源路徑、文件大小與MD5值、對(duì)應(yīng)的元數(shù)據(jù)文件大小和MD5值、父資源列表、子資源列表、打包的包名稱。
[0015]較佳地,所述打包信息包括每個(gè)包的名稱以及其所包含的資源名稱。
[0016]較佳地,該方法進(jìn)一步包括:增加強(qiáng)制打包的設(shè)置選項(xiàng),對(duì)于某些非公共的可以被打入父資源包的子資源,強(qiáng)制令它們單獨(dú)打成一個(gè)包。
[0017]較佳地,打包命名規(guī)則包括:
[0018]規(guī)則一:如果某一資源被指定強(qiáng)制打包,則其包名稱為該資源名稱。
[0019]較佳地,打包命名規(guī)則進(jìn)一步包括:
[0020]規(guī)則二:非強(qiáng)制打包資源,如果父資源列表為空,則其包名稱為資源名稱,規(guī)則二的優(yōu)先級(jí)低于規(guī)則一。
[0021]較佳地,打包命名規(guī)則進(jìn)一步包括:
[0022]規(guī)則三:如果父資源只有一個(gè),則其包名稱為父資源的包名稱,同時(shí)將與該資源同名的包內(nèi)所有的資源所對(duì)應(yīng)的包名稱改為父資源包名稱;規(guī)則三的優(yōu)先級(jí)低于規(guī)則二。
[0023]較佳地,打包命名規(guī)則進(jìn)一步包括:
[0024]規(guī)則四:如果有多個(gè)父資源,則其包名稱為資源名稱;規(guī)則四的優(yōu)先級(jí)低于規(guī)則
_- O
[0025]較佳地,令歷史資源數(shù)據(jù)列表中的歷史資源數(shù)據(jù)為TA1,歷史打包信息列表中的歷史打包數(shù)據(jù)為TBl,本次收集的資源數(shù)據(jù)和打包信息為TA2和TB2 ;步驟C包括:
[0026]Cl、若任一資源的本次的資源數(shù)據(jù)與歷史資源數(shù)據(jù)列表中的對(duì)應(yīng)記錄不一致,將該資源的臟標(biāo)記設(shè)置為True,否則將該資源的臟標(biāo)記設(shè)置為false ;
[0027]C2、若任一資源滿足如下條件之一,設(shè)置該資源的重打包標(biāo)記為True,否則設(shè)置該資源的重打包標(biāo)記為false:
[0028]該資源在TA2中不存在對(duì)應(yīng)的包名稱;
[0029]該資源位于TB2中的一個(gè)包,且該包在TBl和TB2中包含的資源列表不一致;
[0030]該資源在TAl中的臟標(biāo)記和強(qiáng)制打包屬性均為True ;
[0031]該資源的任一子資源的臟標(biāo)記為True,且強(qiáng)制打包標(biāo)記為False ;
[0032]該資源的任一直接或間接父資源的重打包標(biāo)記為True ;
[0033]在資源位于TB2的一個(gè)包中,該包的資源列表中存在需要重新打包的資源;
[0034]C3、生成包含所有重打包標(biāo)記為True的資源的重打包資源列表。
[0035]較佳地,步驟Cl包括:
[0036]如果任一資源滿足如下條件之一,設(shè)置該資源的臟標(biāo)記為True,若都不滿足設(shè)置該資源的臟標(biāo)記為false:
[0037]該資源包含在TA2中,但不包含在TAl ;
[0038]該資源在TAl和TA2中的文件和元數(shù)據(jù)的大小和MD5值不一致;
[0039]該資源在TAl和TA2中的強(qiáng)制打包標(biāo)記和包名稱不一致;
[0040]該資源在TAl和TA2中的子資源列表不一致。
[0041]可選地,所述三維動(dòng)畫引擎為Unity引擎。
[0042]本申請(qǐng)實(shí)施例還提供了一種用于實(shí)現(xiàn)三維動(dòng)畫引擎的資源打包的裝置,包括:
[0043]歷史信息模塊,用于讀取上次打包結(jié)束時(shí)保存的資源數(shù)據(jù)和打包信息,生成歷史資源數(shù)據(jù)列表和歷史打包信息列表;
[0044]當(dāng)前信息模塊,用于對(duì)資源目錄進(jìn)行遍歷,記錄所有的原始游戲資源,收集并保存本次的資源數(shù)據(jù)和打包信息;
[0045]比較模塊,用于比較本次的資源數(shù)據(jù)與歷史資源數(shù)據(jù)列表,以及比較本次的打包信息和歷史打包信息列表,分析哪些資源需要重新打包,生成重打包資源列表;
[0046]打包模塊,用于遍歷重打包資源列表,判斷其子資源是否已被打包,若是,則對(duì)該資源進(jìn)行打包,將該資源從重打包資源列表中刪除,并加入已打包列表,否則先跳過;如此循環(huán)遍歷直到重打包資源列表為空。
[0047]較佳地,若不存在上次打包結(jié)束時(shí)保存的資源數(shù)據(jù)和打包信息,則歷史信息模塊生成兩個(gè)對(duì)應(yīng)的空表。
[0048]較佳地,所述原始游戲資源包括:渲染器、貼圖、材質(zhì)、模型、動(dòng)畫、網(wǎng)格、預(yù)制件、場景或以上內(nèi)容的任意組合。
[0049]較佳地,所述資源數(shù)據(jù)包括:資源路徑、文件大小與MD5值、對(duì)應(yīng)的元數(shù)據(jù)文件大小和MD5值、父資源列表、子資源列表、打包的包名稱。
[0050]較佳地,所述打包信息包括每個(gè)包的名稱以及其所包含的資源名稱。
[0051 ] 較佳地,所述比較模塊進(jìn)一步包括:
[0052]強(qiáng)制打包單元,用于根據(jù)強(qiáng)制打包的設(shè)置選項(xiàng),對(duì)于某些非公共的可以被打入父資源包的子資源,強(qiáng)制令它們單獨(dú)打成一個(gè)包。
[0053]較佳地,打包模塊的打包命名規(guī)則包括:
[0054]規(guī)則一:如果某一資源被指定強(qiáng)制打包,則其包名稱為該資源名稱。
[0055]較佳地,打包命名規(guī)則進(jìn)一步包括:
[0056]規(guī)則二:非強(qiáng)制打包資源,如果父資源列表為空,則其包名稱為資源名稱,規(guī)則二的優(yōu)先級(jí)低于規(guī)則一。
[0057]較佳地,打包命名規(guī)則進(jìn)一步包括:
[0058]規(guī)則三:如果父資源只有一個(gè),則其包名稱為父資源的包名稱,同時(shí)將與該資源同名的包內(nèi)所有的資源所對(duì)應(yīng)的包名稱改為父資源包名稱;規(guī)則三的優(yōu)先級(jí)低于規(guī)則二。
[0059]較佳地,打包命名規(guī)則進(jìn)一步包括:
[0060]規(guī)則四:如果有多個(gè)父資源,則其包名稱為資源名稱;規(guī)則四的優(yōu)先級(jí)低于規(guī)則
_- O
[0061]較佳地,令歷史資源數(shù)據(jù)列表中的歷史資源數(shù)據(jù)為TA1,歷史打包信息列表中的歷史打包數(shù)據(jù)為TBl,本次收集的資源數(shù)據(jù)和打包信息為TA2和TB2 ;比較模塊包括:
[0062]臟標(biāo)記設(shè)置單元,用于當(dāng)任一資源的本次的資源數(shù)據(jù)與歷史資源數(shù)據(jù)列表中的對(duì)應(yīng)記錄不一致時(shí),將該資源的臟標(biāo)記設(shè)置為True,否則將該資源的臟標(biāo)記設(shè)置為false ;
[0063]重打包標(biāo)記設(shè)置單元,用于當(dāng)任一資源滿足如下條件之一時(shí),設(shè)置該資源的重打包標(biāo)記為True,否則設(shè)置該資源的重打包標(biāo)記為false:
[0064]該資源在TA2中不存在對(duì)應(yīng)的