WebGL AssetBundle 載入 快取

2021-10-23 04:12:22 字數 2104 閱讀 7601

u3d的assetbundle真的是博(坑)大精(坑)深啊

安卓的話要先打包到streamingassetpath中,安裝後第一次執行,自動把streaming 中的解壓到persistentdatapath中,因為persistent目錄是在執行過一次才建立的。

但是,webgl專案呢

這個就不存在什麼streaming或者persistent了,因為不能載入本地路徑

所以就只有快取,載入包時就要用

www.loadfromdownloadorcache(url, version)
那麼得想辦法動態的獲取包的這個版本,那麼

www.loadfromdownloadorcache(url, version)
這個過載方法就不合適了,因為這個version沒找到辦法獲取……

文件裡說的是這個version要自增,也就是新的version要大於老的才更新,不過看網上有人說只要版本號不同,就更新,無論是大於還是小於,這個沒試過,不過也無所謂了。

看了一眼,這個載入方法的另一項過載是:

public static www loadfromcacheordownload(string url, hash128 hash, uint crc);
說明:以下只是目前的乙個設想,沒有實踐

首先說最後乙個引數crc,按文件裡說的,這個值非0時則對比crc,目前不關心這個,就讓它是0

最重要的就是第二個引數hash

文件解釋:

hash    hash128 which is used as the version of the assetbundle.
對比這個可以相當於version版本。

那好,想辦法得到各assetbundle包的hash128

從manifest檔案下手,打包之後會有個總的manifest檔案,和你的包的根目錄名同名

比如打包在streamingassets下,則其目錄下有乙個streamingassets.manifest檔案

using(www www=www.loadfromdownloadorcache("..../streamingassets/streamingassets"))

}

如上,getallassetbundles()可以得到所有包的包名

再用getassetbundlehash(包名)得到包對應的hash128

那麼每次載入資源之前,先把包的hash128獲取到,再用

public static www loadfromcacheordownload(string url, hash128 hash, uint crc);
這樣每次載入都會對比這個hash128值,這個就相當於是版本了

我試了一下,在開發環境下,如果資源沒有任何修改,反覆打包,出來的這個hash128是不變的,如果有修改,比如材質的顏色變化一下,prefab的scale變化一下之類的,再打出來的包,hash128就變化了。

理論上說,這樣loadfromdownloadorcache就可以判斷出有沒有更新了

所以,每次開啟程式,首先載入總的manifest,把包和對應的hash128存到乙個地方,比如字典

dictionarybundlehashdict = new dictionary();

using(www www=www.loadfromdownloadorcache("..../streamingassets/streamingassets"))

}

要載入乙個名叫「a.assetbundle"的包

string path = "...../a.assetbundle";

hash128 hash=bundlehashdict["a.assetbundle"];

using(www www = www.loadfromdownloadorcache(path, hash, 0))

理論上如此,有待實踐

**

Bitmap的高效載入與Android快取

bitmap 1.bitmap是android中的影象處理最重要的類之一 2.通過bitmap能獲取的資訊 3.獲取到資訊後,可對其進行縮放,裁剪等操作 bitmap為我們提供了對影象檔案的操作支援,就像file類提供對檔案的操作支援一樣。bitmap的載入方式 為什麼要高效率的載入bitmap?1...

Mybatis個人學習筆記(六) 延遲載入與快取

在真正使用資料時才發起查詢,不用的時候不查詢,按需載入。懶載入 舉例 乙個使用者關聯100個賬戶,查詢使用者時,是否需要把關聯的賬戶資訊全部查詢出來?舉例 查詢賬戶時,需要用到使用者資訊,則需要立即把關聯的使用者資訊一起查詢出來 只要以呼叫方法,立即發起查詢 在對應的四種表關係中 一對多,多對多 通...

django rest framework快取應用

在我們web製作過程中進場使用到快取技術,那麼今天python中的一種簡單便捷的快取技術與大家分享 以下是在省 市 區 聯動的位址查詢做的快取處理 使用快取 省市區的資料是經常被使用者查詢使用的,而且資料基本不變化,所以我們可以將省市區資料進行快取處理,減少資料庫的查詢次數。在django rest...