1.通常把專案中用到的所有shader打到乙個ab包裡,在資源呼叫時首先載入所有shader,因為專案中很多資源引用了shader;
2.把一些共同引用的資源打到同乙個包裡,比如uia用了materialc,uib也用了materialc,uia,uib還用到了texc,那麼我們把materialc,texc打到同乙個包裡,我們使用uia或uib時首先載入他們的引用包(也就是materialc和texc所在的ab包)
3.然後所有lua指令碼類的打到同乙個包裡面
4.所有的字型可以打成同乙個包,所有的例子特效單獨乙個包;
載入assetbundlemanifest
一些重要資訊都在assetbundlemanifest,比如資源依賴,路徑等資訊,所以載入assetbundle前,先要記載讀取assetbundlemanifest的資訊,讀取完之後就沒用了,我們把它解除安裝掉,節省記憶體空間
assetbundle abmanifestbundle = assetbundle.
loadfromfile
(getfullloadabpath
("assetbundles"))
; abmanifest = abmanifestbundle.
loadasset
<
assetbundlemanifest
>
("assetbundlemanifest");
abmanifestbundle.
unload
(false
);
載入相關assetbundle
我們從目標assetbundle包裡載入asset進行例項化的時候,首先檢查這個ab資源包的引用,先載入引用
比如uia用了materialc,uib也用了materialc,uia,uib還用到了texc,那麼我們把materialc,texc打到同乙個包裡,我們使用uia或uib時首先載入他們的引用包(也就是materialc和texc所在的ab包),當所有的相關應用載入完畢,再載入目標assetbundle,最後loadasset我們所需要的打包在該ab包裡面的內容。
但是這樣存在乙個問題,就是乙個ab包裡可能有很多資源,我們載入這些資源的時候,可能會出現重複載入同乙個assetbundle包的情況,這很費時間,所以我們要把載入過的assetbundle存在記憶體中,每次載入ab包時判斷該ab包是否已經載入過了,如果載入過了,那麼它是被我們儲存在記憶體中了,我們直接在記憶體中讀取,這樣會快很多。
public
assetbundle
loadassetbundle
(string respath,
bool unloadbundle =
false
)else
if(depab ==
null)}
}if(depallloaded)
else
}else}}
if(cachemap.
containskey
(abpath))}
return cachemap[abpath]
.assetbundle;
}else
}
載入資源
為了加快載入資源的速度,我們同樣也將已經載入過的資源儲存在記憶體中,載入之間判斷記憶體中是否存在,存在則直接讀取記憶體中的資源,不存在則載入資源然後將其儲存在記憶體中,供下次讀取。
我們每次載入資源時,都先要載入其所在的assetbundle包,並且要記下載入資源ab包被引用的次數,這樣方便我們在解除安裝assetbundle時,檢測當前這個要解除安裝的assetbundle包還有沒有資源引用它,如果沒有資源引用,我們才啟用unload解除安裝該assetbundle
未完待續…
Unity資源伺服器載入以及打包策略
主要內容 3 解壓資源,主要是對zip包進行壓縮。4 資源的讀取 assetbundle讀取 下面簡單介紹各個部分 1 assetbundle一鍵打包 windows assetbundle browser 1.1 新增需要打包的模型預製體 或者聲音 文字 其他 1.2 配置打包平台 android...
Unity打包載入場景(Assetbundle )
打包scene 我們可以把整個場景進行打包,因為移動平台不能更新指令碼,所以這個功能就會有所限制,我的建議是烘培場景,然後把多個場景可復用的物件移除,場景中只保留獨一無二的遊戲物件,然後再打包場景,執行遊戲時載入場景後,再動態的將之前移除的物件重新新增進來。menuitem custom edito...
Unity打包WebGL,html載入速度優化
unity打包webgl後,在日誌欄,看到這句提示 隨後查到,打包webgl時,壓縮格式選擇gzip,並修改iis webconfig引數,可以提公升webgl載入速度 打包後的資料夾如下。如果沒有web.config,可以手動建立 web.config中,新增下面中的內容。安裝iis url re...