五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

UE4熱更

2022-08-13 13:36 作者:TenderRain-  | 我要投稿

文章出處:http://blog.csdn.net/u012385432

前面的幾篇文章中提及了有關(guān).Pak文件和文件下載的部分,這兩部分組合起來(lái),其實(shí)就是我們的資源熱更新了.當(dāng)然代碼的熱更新不在這個(gè)討論范圍內(nèi).代碼的熱更新的話就更加麻煩了.這次討論的只限資源的熱更新…

前面文章鏈接:

1.下載文件鏈接

2.Pak使用教程鏈接

我們?cè)谧鲰?xiàng)目的時(shí)候,通常會(huì)有這樣的需求,比如說(shuō)美術(shù)新出了幾個(gè)模型,需要替換原有工程中的模型.但是包已經(jīng)發(fā)出去了,用戶已經(jīng)安裝.這個(gè)時(shí)候又不可能因?yàn)橐稽c(diǎn)東西讓用戶重新下載整個(gè)軟件.或者說(shuō)包體發(fā)出來(lái)的時(shí)候太大,老板要求在下載好主體的情況下,在進(jìn)入軟件的時(shí)候才去下載要用到的資源.這幾種情況通常就是我們說(shuō)的資源熱更新了.在Unity里面,我們用AssetBunlde來(lái)做資源的熱更新.不得不說(shuō)UNITY對(duì)熱更新的支持還是不錯(cuò)的.UNITY5.0版本以后,AssetBundle會(huì)自己生成Manifest.xml文件.不再需要用戶去維護(hù)復(fù)雜的Dependency關(guān)系了.但是用UE4做的話就沒(méi)那么舒服了…就像UNITY一樣…在UE中,我們使用PAK來(lái)進(jìn)行熱更新.所以一般來(lái)說(shuō)我們的項(xiàng)目發(fā)布的時(shí)候是沒(méi)有那些UASSET資源的.加載uasset其實(shí)就是加載的pak文件中的uasset…

那么UE4的資源熱更新主要有這么幾步

1.打包好.Pak文件并將其放置到服務(wù)器上,其中需要一份數(shù)據(jù)文件Version.txt(json,xml或其他的格式都可以)來(lái)表示當(dāng)前的版本信息.文件的內(nèi)容我目前設(shè)計(jì)的很簡(jiǎn)單.主要就只有兩個(gè)內(nèi)容,一個(gè)是文件的MD5值,另一個(gè)是這次打包.Pak文件一共打包了什么Pak文件進(jìn)去.

2.本地也需要一份Version.txt,用來(lái)比對(duì)服務(wù)器Version和本地的Version的區(qū)別,區(qū)別的標(biāo)識(shí)就是文件的MD5值.如果發(fā)現(xiàn)MD5值不同的話就把服務(wù)器上的Version.txt中所涉及到的所有資源都下載下來(lái)并覆蓋本地的資源,同時(shí)將服務(wù)器的Version.txt覆蓋本地的Version.避免沒(méi)必要的重復(fù)下載.

一.工具的準(zhǔn)備 ---- .pak文件批量打包工具

首先,很蛋疼的是似乎在UE里面沒(méi)辦法通過(guò)C++來(lái)調(diào)用UnrealPak.exe工具,所以我用C#寫(xiě)了一個(gè)批量打包pak文件的工具.可以一次將多個(gè)uasset文件打包成一個(gè).pak文件.或者將多個(gè)uasset文件打包成多個(gè).pak文件.同時(shí),在生成pak文件的時(shí)候還會(huì)生成版本文件.

頁(yè)面效果如下:

打包出來(lái)的東西:

Version.txt內(nèi)容:

實(shí)現(xiàn)這個(gè)工具其實(shí)非常的簡(jiǎn)單.幾十行代碼就可以了.接下來(lái)看一下代碼…其中選中引擎根目錄,選中要打包的文件等代碼就不貼了.篇幅太大.以下是打包的具體代碼

代碼的話實(shí)在是太簡(jiǎn)單了…以至于沒(méi)什么好說(shuō)的.其中生成MD5值的代碼是這樣的:


那么既然已經(jīng)能批量打包pak文件并生成Version.txt了.那么我們就把生成出來(lái)的這堆東西都丟到服務(wù)器上去就可以了.第一步完成.下面在UE4中完成第二部.資源的更新

二. 資源更新

1.首先我們?cè)诖a里面增加一個(gè)狀態(tài)叫做GameUpdateResourcesState,資源更新?tīng)顟B(tài),用來(lái)處理資源的更新

GameUpdateResourcesState.h:

GameUpdateResourcesState.cpp:

這里面,AHttpLoader是我寫(xiě)的一個(gè)發(fā)起HttpRequest的一個(gè)單例類,主要用于和服務(wù)器交互,請(qǐng)求數(shù)據(jù)或者是下載文件等…還有幾個(gè)DownLoadDelegate之類的委托.整體思路很簡(jiǎn)單
1.進(jìn)入該狀態(tài)以后,去下載服務(wù)器上的版本信息文件

2.如果連接不上服務(wù)器或者沒(méi)有服務(wù)器上沒(méi)有這個(gè)文件,那么就直接執(zhí)行下一個(gè)游戲狀態(tài)的邏輯.如果能連接上并下載到了版本信息文件.進(jìn)行下一步

3.獲取服務(wù)器版本文件信息,如果數(shù)據(jù)合法,那么開(kāi)始加載本地信息文件,對(duì)兩個(gè)文件的MD5值進(jìn)行比較.如果相同,那么就進(jìn)行下一游戲狀態(tài)的邏輯,否則執(zhí)行下一步

4.如果MD5值不同,那么就先覆蓋本地的版本信息文件,然后開(kāi)始更新資源

5.一個(gè)一個(gè)資源的下載,下載完最后一個(gè)文件的時(shí)候,資源更新?tīng)顟B(tài)的邏輯就已經(jīng)都做完了,那么可以執(zhí)行接下來(lái)的邏輯啦.

整個(gè)資源的熱更新思路就是這么簡(jiǎn)單.

文章里面涉及到的Pak文件和下載部分的教程我之前都已經(jīng)寫(xiě)過(guò)了.串在一起就是一份完整的熱更新思路了.至于你拿到了pak文件以后要怎么使用,那是你的事,不在這次的討論范圍內(nèi).

但是有一點(diǎn)值得注意的,經(jīng)過(guò)我測(cè)試,目前UE4的pak文件是沒(méi)有依賴關(guān)系的.也就是說(shuō),如果你打包了一個(gè)UBlueprint,里面包含了一個(gè)UStaticMesh的話,那么當(dāng)你直接加載這個(gè)UBlueprint到世界中的時(shí)候,他的Mesh是會(huì)丟失的.在Unity里面我們通過(guò)AssetBundle,可以先將Mesh加載進(jìn)內(nèi)存,這種情況下就能正常加載出來(lái)Prefab了…但是在UE4里面不行.所以可能我們需要自己去維護(hù)這一個(gè)依賴關(guān)系.甚至可能對(duì)于UBlueprint這些要生成一個(gè)文件來(lái)記錄他包含了什么依賴,就像UNITY中做的那樣…處理依賴這個(gè)問(wèn)題在UE4里面估計(jì)會(huì)是一個(gè)比較復(fù)雜的問(wèn)題…這一塊就先不討論了…mmmm…有可能以后也不會(huì)討論…

—————————————————————————————————————————

批量打包工具只要會(huì)一點(diǎn)C#基礎(chǔ) 編寫(xiě)還是很簡(jiǎn)單的最多基礎(chǔ)差點(diǎn)的多花點(diǎn)時(shí)間罷了
畢竟重點(diǎn)的地方都已經(jīng)轉(zhuǎn)載的文檔里貼出來(lái)了
如果小伙伴們自己編寫(xiě)工具時(shí)有疑問(wèn)可以私信我,我看到會(huì)回復(fù)
這邊我已經(jīng)重新編寫(xiě)了一份,工具的網(wǎng)盤(pán)鏈接:

鏈接:https://pan.baidu.com/s/13EwjMFAl5LaF3olNGtT7kA?pwd=w1d8?

提取碼:w1d8?

工具源碼關(guān)注我獲取哦~

效果圖


UE4熱更的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
洛宁县| 宁波市| 龙门县| 新野县| 南陵县| 获嘉县| 明水县| 托里县| 甘肃省| 咸丰县| 运城市| 八宿县| 连云港市| 札达县| 江北区| 科技| 疏附县| 宣城市| 长寿区| 井陉县| 阜康市| 翼城县| 朝阳区| 宁强县| 石河子市| 嘉善县| 沙洋县| 铜陵市| 柞水县| 安国市| 昭平县| 凌海市| 景东| 东宁县| 宁都县| 湘潭市| 台前县| 株洲县| 唐海县| 资中县| 德化县|