AssetBundle

用處

1赏半、AssetBundle是一個壓縮包包含模型、貼圖淆两、預(yù)制體断箫、聲音、甚至整個場景秋冰,可以在游戲運行時加載仲义;
2、AssetBundle自身保存著相互的依賴關(guān)系剑勾;
3埃撵、壓縮包可以使用LZMA和LZA壓縮算法,減少包的大小虽另,更快的進行網(wǎng)絡(luò)傳輸暂刘;
4、把一些可以下載內(nèi)容放在AssetBundle里面洲赵,可以減少安裝包的大小鸳惯。

什么是AssetBundle

1、它是一個存在硬盤上的文件叠萍≈シⅲ可以稱為壓縮包。這個壓縮包可以認為是一個文件夾苛谷,里面包含了多個文件辅鲸。這些文件可以分為兩類;serialized file和resource files腹殿。(序列化文件和源文件)
serialized file:資源被打碎放在一個對象中独悴,最后統(tǒng)一被寫在一個單獨的文件(只有一個)

resource files:某些二進制資源(圖片例书、聲音)被單獨保存,方便快速加載刻炒。
2决采、它是一個AssetBundle對象,我們可以通過代碼從一個特定的壓縮包加載出來的對象坟奥。這個對象包含了所有我們當初添加到這個壓縮包里面的內(nèi)容树瞭,我們可以通過這個對象加載出來使用。

AssetBundle使用流程圖

Asset打包AssetBundle到Server

Server下載AssetBundle解壓成Asset

AssetBundle使用流程(簡稱AB)

1爱谁、指定資源AssetBundle屬性(xxxxa/xxx) 這里xxxa會生成目錄晒喷,名字xxx

給指定資源命名時不區(qū)分大小寫
捕獲.PNG

2、構(gòu)建AssetBundle包```
using UnityEditor;
using System.IO;

public class CreateAssetBundles {

[MenuItem("Assets/Build AssetBundle")]
static void BuildAssetBundle()
{
    string dir = "AssetBundle";
    if (Directory.Exists(dir)==false)
    {
        Directory.CreateDirectory(dir);
    }
    BuildPipeline.BuildAssetBundles("AssetBundle", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
}

}

3访敌、上傳AB包
4凉敲、加載AB包和包里面的資源

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoadFromFileExample : MonoBehaviour {

    // Use this for initialization
    void Start () {
        AssetBundle ab = AssetBundle.LoadFromFile("AssetBundle/scene/cubewall.units3d");
        GameObject wallPrefabs= ab.LoadAsset<GameObject>("cubewall");

        Instantiate(wallPrefabs);
    }
}

AssetBundle分組策略

1、按照實體分組
2寺旺、按照類型分組
3爷抓、按照使用分組 (同一時間內(nèi)使用的所有資源打一個包,可以按照關(guān)卡分組)

依賴打包
捕獲.PNG

1,Build的路徑(隨意只要是在硬盤上都可以的)
2,BuildAssetBundleOptions
BuildAssetBundleOptions.None:使用LZMA算法壓縮迅涮,壓縮的包更小废赞,但是加載時間更長徽龟。使用之前需要整體解壓叮姑。一旦被解壓,這個包會使用LZ4重新壓縮据悔。使用資源的時候不需要整體解壓传透。在下載的時候可以使用LZMA算法,一旦它被下載了之后极颓,它會使用LZ4算法保存到本地上朱盐。
BuildAssetBundleOptions.UncompressedAssetBundle:不壓縮,包大菠隆,加載快
BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4壓縮兵琳,壓縮率沒有LZMA高,但是我們可以加載指定資源而不用解壓全部骇径。

注意使用LZ4壓縮躯肌,可以獲得可以跟不壓縮想媲美的加載速度,而且比不壓縮文件要小破衔。
注意:官方文檔中介紹-有依賴關(guān)系的包清女,必須先加載依賴包。但是實際測試是不分先后加載關(guān)系的晰筛。

IEnumerator Start ()
    {
        string path = "AssetBundle/scene/cubewall.unity3d";
        /*
        AssetBundle ab = AssetBundle.LoadFromFile("AssetBundle/scene/cubewall.unity3d");
        AssetBundle ab1 = AssetBundle.LoadFromFile("AssetBundle/share.unity3d");
        */


        //AssetBundle ab= AssetBundle.LoadFromMemory(File.ReadAllBytes(path));
        //第三種加載AB方式 WWW
        while (Caching.ready == false)
        {
            yield return null;
        }
        //WWW www = WWW.LoadFromCacheOrDownload(@"file://D:\Unity3D Space\AssetBundleProject\AssetBundle\scene\cubewall.unity3d",1);
        WWW www = WWW.LoadFromCacheOrDownload(@"http://D:\Unity3D Space\AssetBundleProject\AssetBundle\scene\cubewall.unity3d", 1);

        yield return www;
        if (string.IsNullOrEmpty(www.error)==false)
        {
            Debug.Log(www.error); yield break;
        }
        AssetBundle ab = www.assetBundle;

        GameObject wallPrefabs= ab.LoadAsset<GameObject>("cubewall");
        Instantiate(wallPrefabs);

    }

AssetBundle的卸載

卸載有兩個方面
1嫡丙、減少內(nèi)存使用
2拴袭、有可能導致丟失
什么時候去卸載資源
AssetBundle.Unload(true)卸載所有資源,即使有資源被使用者(1曙博、在關(guān)切換拥刻、場景切換2、資源沒被用的時候 調(diào)用)
AssetBundle.Unload(false)卸載所有沒有被使用的資源
個別資源怎么卸載1父泳、通過Resources.unloadUnuseAssets 2泰佳、場景切換的時候

關(guān)于文件校驗

CRC MD5 SHA1
相同點:
CRC、MD5尘吗、SHA1都是通過對數(shù)據(jù)進行計算逝她,來生成一個校驗值,該校驗值用來校驗數(shù)據(jù)的完整性睬捶。
不同點:

  1. 算法不同黔宛。CRC采用多項式除法,MD5和SHA1使用的是替換擒贸、輪轉(zhuǎn)等方法臀晃;
  2. 校驗值的長度不同。CRC校驗位的長度跟其多項式有關(guān)系介劫,一般為16位或32位徽惋;MD5是16個字節(jié)(128位);SHA1是20個字節(jié)(160位)座韵;
  3. 校驗值的稱呼不同险绘。CRC一般叫做CRC值;MD5和SHA1一般叫做哈希值(Hash)或散列值誉碴;
  4. 安全性不同宦棺。這里的安全性是指檢錯的能力,即數(shù)據(jù)的錯誤能通過校驗位檢測出來黔帕。CRC的安全性跟多項式有很大關(guān)系代咸,相對于MD5和SHA1要弱很多;MD5的安全性很高成黄,不過大概在04年的時候被山東大學的王小云破解了呐芥;SHA1的安全性最高。
  5. 效率不同奋岁,CRC的計算效率很高思瘟;MD5和SHA1比較慢。
  6. 用途不同厦取。CRC一般用作通信數(shù)據(jù)的校驗潮太;MD5和SHA1用于安全(Security)領(lǐng)域,比如文件校驗、數(shù)字簽名等铡买。

官方AssetBundle Browser Tool

https://github.com/Unity-Technologies/AssetBundles-Browser

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末更鲁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奇钞,更是在濱河造成了極大的恐慌澡为,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件景埃,死亡現(xiàn)場離奇詭異媒至,居然都是意外死亡,警方通過查閱死者的電腦和手機谷徙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門拒啰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人完慧,你說我怎么就攤上這事谋旦。” “怎么了屈尼?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵册着,是天一觀的道長。 經(jīng)常有香客問我脾歧,道長甲捏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任鞭执,我火速辦了婚禮司顿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚕冬。我一直安慰自己免猾,他們只是感情好是辕,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布囤热。 她就那樣靜靜地躺著,像睡著了一般获三。 火紅的嫁衣襯著肌膚如雪旁蔼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天疙教,我揣著相機與錄音棺聊,去河邊找鬼。 笑死贞谓,一個胖子當著我的面吹牛限佩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祟同,長吁一口氣:“原來是場噩夢啊……” “哼作喘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晕城,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泞坦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后砖顷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贰锁,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年滤蝠,在試婚紗的時候發(fā)現(xiàn)自己被綠了豌熄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡物咳,死狀恐怖房轿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情所森,我是刑警寧澤囱持,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站焕济,受9級特大地震影響纷妆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晴弃,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一掩幢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧上鞠,春花似錦际邻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谴咸,卻和暖如春轮听,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背岭佳。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工血巍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人珊随。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓述寡,卻偏偏與公主長得像柿隙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鲫凶,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容