一種三維動畫引擎的資源加載方法、裝置及系統(tǒng)的制作方法
【技術領域】
[0001]本申請涉及計算機視頻游戲開發(fā)技術,一種三維動畫引擎的資源加載方法、裝置及系統(tǒng)。
【背景技術】
[0002]Unity是由Unity Technologies開發(fā)的一個用于創(chuàng)建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型互動內容的多平臺的綜合型游戲開發(fā)工具,是一個全面整合的專業(yè)游戲引擎。
[0003]鑒于操作平臺和Unity自身的限制,Unity資源一般都通過打包為資源包(AssetBundle)的方式進行動態(tài)更新與加載。Unity資源指的是用于生成場景及場景中各種物體的元素,例如模型貼圖素材、場景源文件、插件等。Assetbundle是Unity Pro提供提供的功能,它可以把多個游戲對象或者資源二進制文件封裝到Assetbundle中,提供了封裝與解包的方法。
[0004]對于資源龐大的游戲來說,資源之間的各種依賴關系處理以及加載的時間消耗是個較大的難題,嚴重影響開發(fā)效率。
【發(fā)明內容】
[0005]本申請?zhí)峁┝艘环N三維動畫引擎的資源加載方法、裝置及系統(tǒng),能夠很好管理資源的依賴關系,提升開發(fā)效率。
[0006]本申請實施例提供了一種三維動畫引擎的資源加載方法,在資源打包過程中,將需要打包的資源的依賴信息作為包的主資源,所述資源作為輔資源進行打包,該加載方法包括:先通過預加載目標資源的依賴信息來獲取依賴關系,然后再根據依賴關系加載目標資源的依賴資源和目標資源。
[0007]較佳地,所述先通過預加載目標資源的依賴信息來獲取依賴關系,然后再根據依賴關系加載目標資源的依賴資源和目標資源包括:
[0008]A、對于資源加載請求,判斷依賴信息表中是否包含對應資源的依賴關系,若是,則進行步驟B;否則,在加載任務表中增加一個依賴信息加載的任務T1,并將該資源加載請求添加到任務T1中,然后執(zhí)行步驟C ;
[0009]B、根據依賴信息表判斷該資源對象的依賴對象是否已經加載,若是,則進行步驟C ;否則在加載任務表中增加所有依賴對象的加載任務T2,并將該資源加載請求添加到加載任務T2的請求列表中,然后執(zhí)行步驟C ;
[0010]C、在待加載隊列中添加該資源的加載任務T3 ;
[0011]D、根據加載任務表進行資源加載;
[0012]E、判斷待加載隊列是否為空,若是,結束本流程;否則,從待加載隊列中取出一定數量的任務,添加到加載任務表中,返回步驟D。
[0013]較佳地,步驟A之前進一步包括:
[0014]判斷待加載隊列中是否已經存在對應資源的加載任務,是則將該請求添加到待加載隊列中的所述加載任務的請求列表中,然后執(zhí)行步驟D ;否則直接執(zhí)行步驟A。
[0015]較佳地,步驟A之前進一步包括:
[0016]對于資源加載請求,判斷加載任務表中面是否已經存在對應資源的加載任務,若是,則將該資源加載請求添加到加載任務表中的所述加載任務的請求列表中,然后執(zhí)行步驟D;否則進行步驟A。
[0017]較佳地,步驟A之前進一步包括:
[0018]對于資源加載請求,判斷資源對象表中是否已經存在對應的加載完畢、可以直接進行使用的資源對象,是則增加資源對象表中該對象的引用計數,并直接返回該資源對象的處理,結束該資源加載請求;否則進行步驟A。
[0019]較佳地,步驟D包括:
[0020]D1、判斷加載任務的類型,如果為T1,執(zhí)行步驟D2,如果為T2,執(zhí)行步驟D3 ;如果為T3,執(zhí)行步驟D4 ;
[0021]D2、對于依賴信息加載任務T1,從目標資源包中加載依賴信息并將所述依賴信息加入依賴信息表,然后依次處理該任務所包含的所有資源加載請求,然后執(zhí)行步驟D5 ;
[0022]D3、對于所有依賴對象的加載任務T2,從依賴資源包中加載該加載任務對應的資源對象,將所述資源對象加入資源對象表并添加引用計數。加載結束后,依次處理該任務所包含的所有資源請求:當請求資源的依賴資源全部加載完畢后,執(zhí)行步驟D5 ;
[0023]D4、對于資源的加載任務T3,從包中加載該加載任務對應的資源對象,將所述資源對象加入資源對象表并添加引用計數。加載結束后,依次處理該任務所包含的所有資源請求,然后對客戶端返回該資源對象的處理結果;
[0024]D5、判斷加載任務表中是否還有未處理的任務,若是,返回步驟D1,否則執(zhí)行步驟
Eo
[0025]較佳地,在服務器側和客戶端側,分別通過一個包信息列表對本地的資源進行維護;步驟A之前進一步包括:
[0026]在客戶端啟動時,比較本地和服務器的包信息列表,判斷兩者的校驗信息是否一致,若一致,不作進一步處理;若不一致,表明有包添加、刪除或者修改,則刪除不需要的包或者向服務器發(fā)送請求下載發(fā)生變更的包。
[0027]較佳地,該方法進一步包括:每隔一段時間,對資源對象表進行遍歷,檢查其引用計數是否歸0,并判斷其是否為常駐內存的類型,對于引用計數為0的非常駐資源,對其進行卸載處理。
[0028]可選地,所述三維動畫引擎為Unity引擎。
[0029]本申請實施例還提供了一種三維動畫引擎的資源加載裝置,該裝置包括:
[0030]打包模塊,用于在資源打包過程中,將需要打包的資源的依賴信息作為包的主資源,所述資源作為輔資源進行打包;
[0031]預加載模塊,用于通過預加載目標資源的依賴信息來獲取依賴關系;
[0032]資源加載模塊,用于根據依賴關系加載目標資源的依賴資源和目標資源。
[0033]較佳地,所述預加載模塊包括:第一判斷單元、第二判斷單元、依賴信息加載任務單元和資源加載任務單元;
[0034]第一判斷單元,用于判斷依賴信息表中是否包含與資源加載請求對應的資源的依賴關系,若是,使能第二判斷單元;否則,通知依賴信息加載任務單元在加載任務表中增加一個依賴信息加載的任務T1,并將該資源加載請求添加到任務T1中;
[0035]第二判斷單元,用于根據依賴信息表判斷該資源對象的依賴對象是否已經加載,若是,則通知資源加載任務單元在待加載隊列中添加該資源的加載任務T3;否則,通知依賴信息加載任務單元在加載任務表中增加所有依賴對象的加載任務T2,并將該資源加載請求添加到加載任務T2的請求列表中;然后通知資源加載任務單元在待加載隊列中添加該資源的加載任務T3;;
[0036]依賴關系加載任務單元,用于根據來自第一判斷單元的通知,在加載任務表中增加依賴信息加載的任務T1,并將該資源加載請求添加到任務T1中;或者根據來自第二判斷單元的通知,在加載任務表中增加所有依賴對象的加載任務T2,并將該資源加載請求添加到加載任務T2的請求列表中;
[0037]資源加載任務單元,用于根據來自第二判斷單元的通知,在待加載隊列中添加該資源的加載任務T3;
[0038]資源加載模塊包括:加載單元和待加載任務處理單元;
[0039]加載單元,用于根據加載任務表進行資源加載;
[0040]待加載任務處理單元,用于在加載任務表中的任務處理完畢后,從待加載隊列中取出一定數量的任務,添加到加載任務表中。
[0041 ] 較佳地,該裝置進一步包括:
[0042]待加載判斷模塊,用于判斷待加載隊列中是否已經存在與資源加載請求對應的資源的加載任務,是則將該請求添加到待加載隊列中的所述加載任務的請求列表中。
[0043]較佳地,該裝置進一步包括:
[0044]加載判斷模塊,用于判斷加載任務表中面是否已經存在與資源加載請求對應的資源的加載任務,若是,則將該資源加載請求添加到加載任務表中的所述加載任務的請求列表中。
[0045]較佳地,該裝置進一步包括:
[0046]已加載判斷模塊,用于判斷資源對象表中是否已經存在與資源加載請求對應的加載完畢、可以直接進行使用的資源對象,是則增加資源對象表中該對象的引用計數,并直接返回該資源對象的處理。
[0047]較佳地,加載單元包括:
[0048]任務類型判斷子單元,用于判斷加載任務的類型,如果為T1,使能第一加載子單元,如果為T2,使能第二加載子單元;如果為T3,使能第三加載子單元;
[0049]第一加載子單元,對于依賴信息加載任務T1,從目標資源包中加載依賴信息并將所述依賴信息加入依賴信息表,然后依次處理