unityAB包(1/2)

unityAB包學習

      • 1.AB包的導出
        • 擴展BuildAssetBundleOptions
          • 無特殊選項
          • 壓縮相關選項
      • 2.AB包資源管理
      • 3.Resource和AssetBundle加載方式的區別
      • 4.預設體
      • 5.Unity Asset Bundle Browser 工具
      • 5為什么要勾選拷貝到StreamingAsset里面。
      • 6.AB包的加載

1.AB包的導出

首先在Project窗口,在Asset窗口下創建一個名為Editor的文件夾,并將AB包導出的代碼放于此處,否者將報錯。
選擇你要打包的內容到某個預設定的包中,下圖示意為把Sampleplayr這個預制件預處理放置到charactorAb包中。真正開始導出是使用你自定義的導出按鍵,代碼在下方。
在這里插入圖片描述

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;public class AssetBundleExport
{[MenuItem("Assets/Export AssetBundles")]//菜單物品:于 Asset按鍵下方欄目的“Name”按鈕。//此處Name是“Export AssetBundles”static void BuildAllAssetBundles(){//靜態方法,工具類,不需要實例化,unity內部似乎已經幫我們處理過了string assetBundleDirectory = "E:\\unt\\AssetBundle\\Assets\\ExportAB";if (!Directory.Exists(assetBundleDirectory))//檢測路徑是否存在{//如果不存在就新建一個文件夾Directory.CreateDirectory(assetBundleDirectory);}//否者導出//參數為 路徑/ AB包導出選項(此處為none)/ 導出的目標平臺BuildPipeline.BuildAssetBundles(assetBundleDirectory,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows);}
}

unity官方頁面:在這里插入圖片描述

擴展BuildAssetBundleOptions
無特殊選項

BuildAssetBundleOptions.None
作用:默認選項,不應用任何特殊的構建選項。構建的 AssetBundle 會包含所有依賴項,并且不會進行額外的優化或壓縮。

壓縮相關選項

在這里插入圖片描述
在這里插入圖片描述

2.AB包資源管理

AB包導出的資源最好合理分類,不要引用Project中的Resource內的資源文件,否則會多次調用復制。
在這里插入圖片描述
為什么呢?是由于unity內部機制決定的!
在這里插入圖片描述

3.Resource和AssetBundle加載方式的區別

在這里插入圖片描述
也就是說Resource雖然保證了能引用到某個文件,但它不合理的遍歷查找方式和重復資源加載和落后的打包發布使得這個系統不如AssetBundle。
但是Resource的操作方便,適合小型游戲的開發。使用Resources系統可以快速地加載和使用資源,無需過多考慮資源的重復加載和打包優化等問題,能夠提高開發效率。開發人員可以更專注于游戲的功能實現,而不必花費過多精力在資源管理上。

4.預設體

預設體是一種“反射”并沒有真正存儲C#代碼,而是對C#腳本的一種關聯,這就是為什么預設體即使掛載了C#腳本和組件也能放入AB包中。

5.Unity Asset Bundle Browser 工具

工具下載自行百度。
Configure欄
![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/a1e060b342fe4668a9cf760631111dab.png
build欄
在這里插入圖片描述
在這里插入圖片描述

下圖來源:
于毒,空間鏈接

    1. LZMA 壓縮
      壓縮原理
      LZMA 是一種通用的數據壓縮算法,采用了字典編碼和算術編碼相結合的方式,能實現較高的壓縮比。它會對整個 AB 包進行壓縮,生成一個緊湊的文件。
      優點
      高壓縮比:生成的 AB 包文件體積最小,在網絡傳輸時可以節省大量的帶寬,減少下載時間和流量消耗,適合需要通過網絡大量下載資源的情況,例如手游的資源更新。
      缺點
      加載時間長:在加載 AB 包時,需要先將整個壓縮包解壓,這個過程會消耗較多的 CPU 資源和時間,導致加載速度變慢。
      解壓內存需求大:解壓過程需要足夠的內存來存儲解壓后的文件,可能會對內存有限的設備造成壓力。
      適用場景
      適用于網絡帶寬有限、下載速度較慢的場景,例如移動設備通過移動網絡下載資源,或者資源更新包較大的情況。
    1. LZ4 壓縮
      壓縮原理
      LZ4 是一種無損數據壓縮算法,它采用塊壓縮的方式,將 AB 包分割成多個小塊分別進行壓縮。這樣在加載時可以按需解壓部分塊,而不需要解壓整個包。
      優點
      快速加載:由于采用塊壓縮,加載時可以只解壓需要的部分,大大縮短了加載時間,提高了資源的加載效率。
      低內存占用:解壓過程中只需要解壓當前需要的塊,對內存的需求相對較小,適合內存有限的設備。
      缺點
      壓縮比相對較低:相比 LZMA,LZ4 的壓縮比要低一些,生成的 AB 包文件體積會稍大。
      適用場景
      適用于對加載速度要求較高的場景,例如游戲運行時需要頻繁加載和卸載資源的情況,如場景切換、動態加載模型等。
    1. 不壓縮
      壓縮原理
      不進行任何壓縮操作,AB 包以原始的二進制數據形式存儲。
      優點
      最快的加載速度:由于不需要進行解壓操作,加載 AB 包的速度最快,能夠立即使用資源。
      缺點
      文件體積大:AB 包的文件大小與原始資源文件大小基本相同,會占用更多的存儲空間,并且在網絡傳輸時需要更多的帶寬和時間。

5為什么要勾選拷貝到StreamingAsset里面。

在這里插入圖片描述
何時是只讀的?
在這里插入圖片描述

6.AB包的加載

同一個AB包(指小包)不能夠被重復加載,否者報錯。

void Start ()
{// 第一步 加載 AB 包AssetBundle ab = AssetBundle.LoadFromFile (Application.streamingAssetsPath + "/" + "model");// 第二步 加載 AB 包中的資源// 只是用名字加載 會出現 同名不同類型資源 分不清// 建議大家用 泛型加載 或者 是 Type 指定類型//GameObject obj = ab.LoadAsset<GameObject>("Cube");GameObject obj = ab.LoadAsset("Cube", typeof(GameObject)) as GameObject;Instantiate(obj);
}
StartCoroutine (LoadABRes ("head", "23_11100001"));
IEnumerator LoadABRes (string ABName, string resName)
{
// 第一步 加載 AB 包AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync (Application.streamingAssetsPath + "/" + ABName);yield return abcr;
// 第二步 加載資源AssetBundleRequest abq = abcr.assetBundle.LoadAssetAsync (resName, typeof 	(Sprite));yield return abq;
//abq.asset as Sprite;img.sprite = abq.asset as Sprite;
}
AssetBundle.UnloadAllAssetBundles(bool unloadAllObjects)

參數含義:該方法有一個布爾類型的參數unloadAllObjects 。當參數為true時,會卸載所有已加載的 AB 包,并且會卸載所有通過這些 AB 包加載到內存中的資源,即便這些資源正被其他部分依賴引用;當參數為false時 ,會卸載所有未被其他資源依賴的 AB 包及其資源,對于正被依賴引用的資源則不會卸載。

AssetBundle ab = AssetBundle.LoadFromFile("path/to/your/assetbundle");
// 加載資源
GameObject obj = ab.LoadAsset<GameObject>("YourGameObject");
// 卸載AB包,不卸載已加載資源實例
ab.Unload(false); 
// 此時obj仍可使用,但不能再從ab加載新資源// 卸載AB包,同時卸載已加載資源實例
ab.Unload(true); 
// 此時obj不可用,相關資源內存被釋放

異步卸載包

IEnumerator UnloadABBundleAsync(){// 進行異步卸載,同時卸載已加載資源實例var unloadRequest = ab.UnloadAsync(true);// 等待卸載完成while (!unloadRequest.isDone){yield return null;}Debug.Log("AB包及其已加載資源實例已成功異步卸載");// 此時AB包已卸載,ab引用不再有效,可設置為nullab = null;}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73963.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73963.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73963.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法——廣度優先搜索——跨步迷宮

原題鏈接 思路&#xff1a;找出最短路徑&#xff0c;然后判斷是否存在連續三個點是橫縱坐標相等的&#xff0c;如果有就步數減1 但是有兩個樣例過不了 錯誤原因&#xff1a;在錯誤的測試案例中&#xff0c;最短路徑可能有多條&#xff0c;而我剛好選了一條比較曲折的&#x…

某酒企數字化轉型及電商規劃項目啟動會暨培訓會v(60頁PPT)(文末有下載方式)

詳細資料請看本解讀文章的最后內容。 在當今數字化浪潮席卷之下&#xff0c;企業的發展面臨著前所未有的機遇與挑戰。對于某酒企而言&#xff0c;數字化轉型和電商規劃已成為其實現 “二次騰飛”、邁向世界級酒企的關鍵戰略舉措。本次啟動會暨培訓會&#xff0c;為該酒企的轉型…

NET6 WebApi第5講:中間件(源碼理解,俄羅斯套娃怎么來的?);Web 服務器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL

一、NET6的啟動流程 區別&#xff1a; .NET6 WebApi第1講&#xff1a;VSCode開發.NET項目、區別.NET5框架【兩個框架啟動流程詳解】_vscode webapi-CSDN博客 2、WebApplicationBuilder&#xff1a;是NET6引入的一個類&#xff0c;是建造者模式的典型應用 1>建造者模式的…

vue中根據html動態渲染內容

需求&#xff1a;根據數據中的html&#xff0c;因為我是在做填空&#xff0c;所以是需要將html中的_____替換成input&#xff0c;由于具體需求我使用的是元素contenteditable代替的可編輯的input html部分 <div class"wrap"><component :is"rendered…

【AI】AI編程助手:Cursor、Codeium、GitHub Copilot、Roo Cline、Tabnine

文章目錄 一、基本特性對比二、收費標準三、私有部署能力1、Tabnine2、Roo Code 三、代碼補全與自然語言生成代碼四、安裝獨立的IDE安裝插件安裝 五、基本使用&#xff08;一&#xff09;Cursor&#xff08;二&#xff09;GitHub Copilot1、獲取代碼建議2.聊天1&#xff09;上下…

三軸云臺之角速度信號篇

三軸云臺的角速度信號主要通過其內置的傳感器&#xff08;如陀螺儀&#xff09;來感知和測量。 一、角速度信號的感知與測量 在三軸云臺中&#xff0c;陀螺儀是測量角速度的關鍵組件。它通常安裝在三個互相垂直的軸上&#xff08;通常為X、Y、Z軸&#xff09;&#xff0c;能夠…

Grid 布局實現三欄布局

使用 CSS Grid 布局實現三欄布局(左右固定 100px,中間自適應)的核心原理是通過網格模板精確控制列寬分配。以下是具體實現方法及優化技巧: 一、基礎實現 ?父容器設置 為外層容器添加 display: grid 使其成為網格容器,并通過 grid-template-columns 定義列寬 css .contain…

綠盟春招實習一面

《網安面試指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇網安資料庫https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

進制轉換(R轉十)(1290. 二進制轉換十進制、1292. 十六進制轉十進制、1291. 八進制轉十進制、1405. 小麗找潛在的素數)

題單地址&#xff1a;題單中心-東方博宜OJ 這里以二進制轉十進制為例&#xff08;按位加權求和法&#xff09; 1290. 二進制轉換十進制 問題描述 請將一個 25 位以內的 2 進制正整數轉換為 1010 進制&#xff01; 輸入 一個 25 位以內的二進制正整數。 輸出 該數對應的…

Redis 本地安裝

首先安裝&#xff1a; https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-from-source/ 進入root目錄 tar -xzvf redis-stable.tar.gz cd redis-stable make然后 install sudo make install最后可以直接啟動 redis-server但是此時啟…

9.嗅探與Wireshark進階分析

嗅探與Wireshark進階分析 第一部分&#xff1a;嗅探的概念與重要性第二部分&#xff1a;Wireshark進階功能第三部分&#xff1a;嗅探實踐與分析總結 目標&#xff1a; ? 理解嗅探&#xff08;Sniffing&#xff09;的概念及其在網絡安全中的作用 ? 掌握Wireshark的進階功能&a…

在 VSCode 遠程開發環境下使用 Git 常用命令

在日常開發過程中&#xff0c;無論是單人項目還是團隊協作&#xff0c;Git 都是版本管理的利器。尤其是在使用 VSCode 連接遠程服務器進行代碼開發時&#xff0c;Git 不僅能幫助你管理代碼版本&#xff0c;還能讓多人協作變得更加高效。本文將介紹一些常用的 Git 命令&#xff…

npm 命令使用文檔

目錄 簡介安裝與配置基礎命令依賴管理版本控制腳本管理包發布高級命令配置管理最佳實踐常見問題 1. 簡介 npm (Node Package Manager) 是 Node.js 的官方包管理工具&#xff0c;提供&#xff1a; 130萬 開源包的注冊表訪問依賴解析與版本管理項目腳本自動化私有包管理能力完…

【Linux篇】進程控制

&#x1f4cc; 個人主頁&#xff1a; 孫同學_ &#x1f527; 文章專欄&#xff1a;Liunx &#x1f4a1; 關注我&#xff0c;分享經驗&#xff0c;助你少走彎路&#xff01; 1. 進程創建 1.1 fork函數 在linux中fork函數是非常重要的函數&#xff0c;它從已存在進程中創建一個…

HyperAD:學習弱監督音視頻暴力檢測在雙曲空間中的方法

文章目錄 速覽摘要1. 引言2. 相關工作弱監督暴力檢測雙曲空間中的神經網絡 3. 預備知識雙曲幾何切空間&#xff08;Tangent Space&#xff09;指數映射與對數映射&#xff08;Exponential and Logarithmic Maps&#xff09;3.1 雙曲圖卷積網絡&#xff08;Hyperbolic Graph Con…

動態規劃(6.不同路徑II)

題目鏈接&#xff1a;63. 不同路徑 II - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 本題為不同路徑的變型&#xff0c;只不過有些地方有「障礙物」&#xff0c;只要在「狀態轉移」上稍加修改就可解決。 狀態表示&#xff1a; 對于這種Γ路徑類」的問題&#xf…

深度洞察:DeepSeek 驅動金融行業智能化轉型變革

該文章為軟件測評&#xff0c;不是廣告&#xff01;&#xff01;&#xff01;&#xff01; 目錄 一.金融行業的智能化轉型浪潮? 二.DeepSeek的核心技術剖析 1.DeepSeek 模型的金融智慧? 2.實時聯網搜索&#xff1a;把握金融市場脈搏? 3.RAG 能力&#xff1a;鑄就精準金…

藍橋杯備考----》暴力枚舉---金盞花

這道題&#xff0c;一共12位&#xff0c;給了后六位&#xff0c;我們只要枚舉前六位就行了&#xff0c;當然如果是10的12次方的話&#xff0c;必須要開long long才可以存下&#xff0c;這點我們不要忘了 然后題目中又告訴了沒有前導0&#xff0c;我們可以從100000開始枚舉&…

RAG各類方法python源碼解讀與實踐:利用Jupyter對RAG技術綜合評測【3萬字長文】

檢索增強生成&#xff08;RAG &#xff09;是一種結合信息檢索與生成模型的混合方法。它通過引入外部知識來提升語言模型的性能&#xff0c;從而提高回答的準確性和事實正確性。為了簡單易學&#xff0c;不使用LangChain框架或FAISS向量數據庫&#xff0c;而是利用Jupyter Note…

Python列表2

print("—————————— 列表的相關操作 ————————————")lst.append(x)在列表lst最后增加一個元素 lst.insert(index,x)在列表中第index位置增加一個元素 lst.clear()清除列表lst中所有元素 lst.pop(index)將列表lst中第index位置的元素取出&#xf…