主頁 >  其他 > 使用 Addressables 來管理資源

使用 Addressables 來管理資源

2021-12-10 06:27:16 其他

使用 Addressables 來管理資源

一、安裝

打開Package Manager,在Unity Technologies的目錄下找到Addressables,更新或下載,

二、配置

依次打開Windows/Asset Management/Addressables/Groups選單,

首次打開后會提示需要創建組態檔,點擊Create Addressables Settings
創建組

Assets目錄下會生成AddressableAssetsData檔案夾,
組態檔夾

Ⅰ. 認識資源組(AssetGroups)與組策略(AssetGroups Schemas)概念

  1. 點擊Manage Groups,回傳剛才的Addressables Groups面板,此時已經有了兩個內置的組,

  2. Built In Data存盤的是工程中Resources檔案夾下的資源,隨App構建的場景資源,以及其他一些必要的資源等,

  3. Default Local Group (Default)組存盤的是工程中被標記為Addressables的資源,假如不對其進行手動分組,則默認放在這個組中,

  4. 點擊Create,可以指定模板來復制一個組或者創建一個全新的組,模板存盤在AddressableAssetsData/AssetGroupTemplates檔案夾下,默認有一個名為Packed Assets的模板,新創建的組存盤在AddressableAssetsData/AssetGroups檔案夾下,我們手動建立一個名為Remote的新組,
    AssetGroups

  5. 點擊Remote組的Add Schema按鈕,添加Content Update RestrictionContent Packing & Loading策略,注意不要額外添加Resources and Built In Scene策略,這個已經由Built In Data組負責了,

    AssetGroups檔案夾中有一個Schemas檔案夾,存放著所有資源組的組策略序列化檔案,命名規則為$"{組名}_{策略型別}"
    組策略

  6. 配置Remote組策略,

    • 修改在Content Update Restriction下的Update Restriction選項,

      Can Change Post Release的意思是,當前資源組進行最終構建時會完全覆寫上一次構建結果(打包出的檔案名與上一次不同,上一次的包徹底無效化,部署時可以直接刪掉),一般這種方式叫做 全量更新

      Can not Change Post Release則意味著,當前資源組構建時需要與上一次構建結果進行比對(Addressables Groups/Tools/Check for Content Update Restrictions),上一次構建出的包不發生變化,新構建的包則建立在舊包的基礎上(相同的資源存盤在舊包內,修改和添加的資源存盤在新包內,部署時需要將新包和舊包一起發到服務器上),這種方式一般叫做 增量更新

    • 修改Content Packing & Loading下的Build PathLoad Path選項,

      • LocalBuildPath 本地構建路徑,當App發布時,會將這個路徑下的包拷貝到App的StreamingAssets里,

      • LocalLoadPath 本地加載路徑,當App運行時,會從這個路徑下讀取資源包,一般也是在App的StreamingAssets里,

        Local___Path 說明這個組中的資源包會包含在App的安裝包內,如果所有資源組都設定為Local,則這個App安裝包是 全資源包 (全資源包一般是設定為Can not Change Post Release的),

        Local___Path

      • RemoteBuildPath 遠程構建路徑,當構建資源包后,需要將這個路徑下的包拷貝到服務器上,

      • RemoteLoadPath 遠程加載路徑,當App運行時,會從這個地址下載catalog,并與本地catalog對比來判斷是否需要更新資源,

      如果想對 全資源包 進行更新,可以點擊Addressables Groups/Tools/Check for Content Update Restrictions,會自動生成差異化資源組,將這些資源組設定為遠程并構建部署,則可以將App內包含的舊資源進行覆寫,

    • Advanced Options 是更精細化控制資源包構建與加載流程的選項,無特殊情況保持默認即可,需要注意的是Include in Build選項,可以控制當前資源包是否參與本次構建,

Ⅱ. 總體配置

AddressableAssetSettings負責整體配置資源包的構建引數,

設定資源包地址的Profiles

Profiles/Profiles In Use 控制了當前資源包路徑設定,

我們剛才對資源包的路徑進行了本地與遠程的設定,但是并沒有深入了解這些路徑是如何拼接而成的,比如為什么本地資源包會在構建到StreamingAssets檔案夾中呢,
Profiles

點擊Manage Profiles,彈出上圖的Addressables Profiles面板,之前我們設定的本地路徑與遠程路徑就是在這里定義的,總體上路徑由固定的字串、中括號與花括號組成,中括號內包含了發布時編輯器所確定下來的變數,比如運行平臺等;花括號則包含了App運行時所獲取的變數,也可以在代碼內手動指定一個自定義的變數,

這就解釋了為什么我們將資源包指定為Local___Path時,最侄訓存在于App的StreamingAssets檔案夾中,是因為[UnityEngine.AddressableAssets.Addressables.BuildPath]這個地址就是編輯器發布App時所指定目錄下的StreamingAssets檔案夾地址,而{UnityEngine.AddressableAssets.Addressables.RuntimePath}這個地址則是App運行時的StreamingAssets檔案夾地址,

我們也可以新建一個測驗用的Profile和一個發布用的Profile,只需要把RemoteLoadPath中的http地址指向測驗用服務器地址和正式版服務器地址即可,

設定是否需要遠程更新

假如我們的App不需要進行遠程資源加載和更新,則保持Content Updata/Build Remote Catalog不勾選即可,否則則需要將其勾選,
Update

Disable Catalog Update on Startup則決定是否在App啟動時自動更新catalog,
假如我們希望App啟動時將所有的更新包先行下載下來,則可以將其勾選,并在代碼中手動呼叫
Addressables.InitializeAsync()
Addressables.CheckForCatalogUpdates()
Addressables.UpdateCatalogs()
等方法,獲取到需要更新的資源包串列,并對其依次進行手動更新,

假如我們希望在App運行中需要某個資源時才會去從遠程下載,則可以保持其不勾選的默認狀態,這種方式下Addressables系統會在App啟動時自動呼叫上述的一系列方法將本地catalog與遠程同步,但是并不會更新資源包,

三、資源管理

  1. 將資源匯入工程中

  2. 此時Inspector面板上新添加了一個Addressable選項,
    將需要打包的資源勾選,出現一長串的資源路徑,這個路徑就是我們加載這個資源時所需要的路徑引數

  3. 點擊Select按鈕,彈出資源組面板,剛添加的資源會位于默認組員組Default Local Group (Default)中,
    Assets

  4. 如果能保證不沖突的話,我們也可以將這個路徑手動簡化,或者讓編輯器自動對其進行簡化,在資源組面板右鍵資源并點擊Simplify Addressable Names,可以將復雜的路徑簡化為不帶型別后綴的檔案名,方便使用,
    Simply

  5. 也可以為資源指定標簽,將一系列資源指定為同一個標簽后,則可以在App運行時將其以按標簽加載的方式同時加載進來,比如我們將工程中的Lua腳本全部指定一個Scripts的標簽等,

四、構建資源包

Ⅰ. 首次構建

首次構建資源包需要點擊資源組面板的Build/New Build/Default Build Script
Build

打包成功后在AddressableAssetsData檔案夾下生成一個保存當前資源狀態的bin檔案,這個檔案是后續資源增刪改時用來與前一次打包做對比用的,并且它保存了至關重要的catalog檔案資訊,

同時在RemoteBuildPath位置生成catalog以及遠程資源包,
RemoteBuildPath

此時我們可以隨即進行App的構建,

每次構建資源包,都需要重新構建App,

如果希望更新資源包,不能使用Build/New Build方式,

Ⅱ. 更新包

將資源增刪改完畢之后,點擊Tools/Check for Content Update Restrictions
Update Assets

選擇首次構建時生成的bin檔案,彈出Content Update Preview面板,點擊Apply Changes

我們這里的默認資源組的Content Update Restriction選項設定的是Can not Change Post Release,因為本地資源已經跟隨App一同發布了,修改本地資源是沒有意義的,除非重新構建App,
Content Update Preview

編輯器替我們自動生成了新的遠程資源組,并將有變動的資源放了進去,

這里不要混淆 遠程資源組Content Update Restriction 兩個概念,遠程資源組既可以標記為不可修改,也可以標記為可修改,
Content Update Groups

我們可以把這些資源放到其他遠程組里,也可以保持不變,這方面的策略應該顧及資源包的粒度,檔案大小等,嚴格執行起來還是比較燒腦的,

資源組重新設定完畢后,點擊Build/Update a Previous Build,并再次選擇首次構建時生成的bin檔案,以更新方式構建資源包,

切勿以Build/New Build的方式構建,如果不小心點了,兩個解決方式,git reset --hard或者重新打包App……

Update Build

此時打開遠程構建目錄(RemoteBuildPath),發現已經生成了由新的遠程資源組構建的資源包,而catalog檔案的修改日期也已經發生了變化,說明雖然catalog檔案名沒有發生變化,但是其內容已經更新了,

我這里截圖的catalog檔案名發生了變化,是寫文測驗的時候把之前的構建結果給刪了,實際上應該是不會發生變化的,請忽略,o_0

New Build Result

我們允許的流程是:構建資源包->構建App->以更新方式構建資源包->以更新方式構建資源包...

我們不允許的流程是:...->構建App->構建資源包...

原因是每次點擊Build/New Build/***,catalog檔案名都會發生變化,而App只記錄上一次構建資源包時的catalog檔案名,假如我們在構建App之后重新構建了資源包,則舊的App無法識別新的catalog,從而更新失敗,

五、部署

RemoteBuildPath目錄下的檔案上傳至服務器,包括資源包以及catalog檔案,保證RemoteLoadPath可訪問即可,

實際部署還是比教程寫的要麻煩很多的,權限,跨域,負載能力,加密,防止各種網路攻擊等,各種手段都要用上,我們僅僅是驗證技術路線,麻煩事就先不考慮啦,

如果僅僅是測驗的話,其實編輯器還提供了一個Host功能
Hosting

點擊Create/LocalHosting,新建一個服務端,指定埠,勾選Enable即可,

注意我們需要將Profiles/RemoteLoadPath修改為http://本機IP或者localhost:埠號,默認Profiles的遠程加載地址多了一個[BuildTarget],這是訪問不到的,

Hosting 2

Hosting 3

六、加載

新建一個腳本,用來測驗資源的加載,

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;

public class SwitchSprites : MonoBehaviour
{
    [SerializeField] private RawImage _emojiImage;
    [SerializeField] private Text _infoText;

    private int _indicator;

    private AsyncOperationHandle<IList<Texture>> _operation;

    private async void Start()
    {
        _operation = Addressables.LoadAssetsAsync<Texture>("emoji", null);
        await _operation.Task;

        _infoText.text = "Emoji Load Completed";

        GetComponent<Button>().onClick.AddListener(() =>
        {
            _indicator++;
            if (_indicator >= _operation.Result.Count)
            {
                _indicator = 0;
            }

            _emojiImage.texture = _operation.Result[_indicator];
        });
    }

    private void OnDestroy()
    {
        Addressables.Release(_operation);
    }
}

這里一上來直接就可以Addressables.LoadAssetsAsync<Texture>(),是因為我測驗的時候沒有勾選AddressableAssetSettings/Content Update /Disable Catalog Update on Startup,所以App在加載時自動更新了catalog,而資源包下載則類似于Lazy 模式,即用即下載(快取中如果有匹配的資源包則直接加載),真正使用這套系統時,一般會采用勤快一點的模式,先更新必要的資源包,讀條一波,然后App才正式運行,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/378149.html

標籤:其他

上一篇:X-Gorgon演算法引數獲取(python版,附原始碼)

下一篇:Linq查詢關鍵字及await,async異步關鍵字的自定義擴展

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more