【Unity3D】基于AssetBundle实现资源热更新
创始人
2024-04-22 16:40:04
0

1 前言

        Unity3D 本地资源一般放在 Resources 目录下,但是 Resouces 文件夹的大小不能超过 2G,使用 AssetBundle 管理资源可以解决 Resources 文件夹受限问题。

        AssetBundle 主要用于管理资源,配合 AssetDatabase 和 AssetImporter 可以实现资源重命名,配合 BuildPipeline 可以实现资源压缩,配合 WWW 或 UnityWebRequest 可以实现加载服务器资源。下面简单介绍下相关接口:

        1)AssetBundle 获取资源名,加载、卸载资源

        静态方法: 

// 从文件中加载AssetBundle
public static AssetBundle LoadFromFile(string path)
// 从二进制数组中加载AssetBundle
public static AssetBundle LoadFromMemory(byte[] binary)
// 从流中加载AssetBundle
public static AssetBundle LoadFromStream(Stream stream)
// 卸载所有AssetBundle
public static void UnloadAllAssetBundles(bool unloadAllObjects)
// 销毁对象
public static void Destroy(Object obj)

        实例方法: 

// 获取所有资源名
public string[] GetAllAssetNames()
// 判断是否包含资源
public bool Contains(string name)
// 加载资源
public Object[] LoadAllAssets()
public T[] LoadAllAssets() where T : Object
public Object[] LoadAllAssets(Type type)
public Object LoadAsset(string name)
public T LoadAsset(string name) where T : Object
public Object LoadAsset(string name, Type type)
// 卸载资源, unloadAllLoadedObjects为false时不卸载已从Bundle中加载出的资源
public void Unload(bool unloadAllLoadedObjects)

        说明:入参 name 不区分大小写,建议使用小写。

        2)AssetBundleManifest 获取资源依赖

// 获取所有AssetBundles
public string[] GetAllAssetBundles()
// 获取指定assetBundleName的直接依赖
public string[] GetDirectDependencies(string assetBundleName)
// 获取指定assetBundleName的所有依赖
public string[] GetAllDependencies(string assetBundleName)

        说明:入参 assetBundleName 不区分大小写,建议使用小写。 

        3)AssetDatabase 获取所有资源名、删除资源

// 获取所有AssetBundle资源名
public static string[] GetAllAssetBundleNames()
// 根据assetBundleName删除AssetBundle
public static bool RemoveAssetBundleName(string assetBundleName, bool forceRemove)
// 刷新Project视图目录, 相当于右键手动刷新
public static void Refresh()

        4)AssetImporter 设置资源名

// 获取AssetImporter, 资源文件路径
public static AssetImporter GetAtPath(string path)
// 获取/设置资源文件名
public string assetBundleName { get; set; }

        5)BuildPipeline 压缩资源

// 压缩所有标记为AssetBundle的资源
public static AssetBundleManifest BuildAssetBundles(string outputPath, // 压缩文件输出路径BuildAssetBundleOptions assetBundleOptions, // 压缩算法BuildTarget targetPlatform // 平台
)
// BuildAssetBundleOptions.None: LZMA压缩算法, 压缩比大, 加载慢, 使用前需要整体解压
// BuildAssetBundleOptions.ChunkBasedCompression: LZ4压缩算法, 压缩比中等, 加载快可以加载指定资源而不用解压全部
// BuildAssetBundleOptions.UncompressedAssetBundle: 不压缩, 加载快

        6)WWW 获取网络资源

// 获取WWW
public static WWW LoadFromCacheOrDownload(string url, int version)
// 获取AssetBundle
public AssetBundle assetBundle { get; }

        说明:WWW 被 Unity3D 官方标记为过时了,建议使用 UnityWebRequest。

         7)UnityWebRequest 获取网络资源

UnityWebRequest webRequest = UnityWebRequestAssetBundle.GetAssetBundle(uri)
yield return webRequest.SendWebRequest()
AssetBundle assetBundle = DownloadHandlerAssetBundle.GetContent(webRequest)

2 资源命名

        

3 资源压缩

4 本地资源加载

5 使用WWW加载服务器资源

6 使用 UnityWebRequest 加载服务器资源

相关内容

热门资讯

广发证券:深海资源开发的政策催... 广发证券研报表示,在海洋强国战略指引下,国内后续有望推出相应政策推动深海经济发展,重点方向包括深海采...
观察日出的感受 观察日出的感受观察日出的经历 很喜欢,但也很讨厌.喜欢是因为日出好美,好舒服.新的一天又到来了....
九典制药聚普瑞锌颗粒获药品注册... 来源:中访网财观中访网数据  湖南九典制药股份有限公司(证券代码:300705)近日宣布,其研发的化...
伊朗“严重怀疑”以方停火承诺   这是6月29日在伊朗首都德黑兰拍摄的遭以军袭击后的伊温监狱。  新华社发  据新华社电 伊朗司法...
第四届RCEP区域(山东)进口... 转自:国际商报  6月27日—29日,第四届RCEP区域(山东)进口商品博览会在山东临沂举行。本届博...
学习宣传丁宇翔同志先进事迹   本报讯(记者李钰之)近日,中央政法委印发《关于学习宣传丁宇翔同志先进事迹的通知》,号召全国政法机...
玉兰杯里竞芳华,教育援疆谱新篇... 转自:上观新闻为深入贯彻新时代教师队伍建设改革精神,助力喀什地区教育质量提升,2025年首届上海援疆...
上半年136股翻倍!你错过了哪...   上半年136只个股翻倍!你擒获了哪只?错过了哪只?——道达投资手记  上半年A股主要宽基指数普涨...
用什么成语可以描述陆羽 用什么成语可以描述陆羽用什么成语可以描述陆羽... 用什么成语可以描述陆羽 展开鸿渐之仪 ...
心理健康通讯稿 心理健康通讯稿心理健康通讯稿... 心理健康通讯稿 展开 心理健康小知识]人际交往的艺术没有...