【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 加载服务器资源

相关内容

热门资讯

电视剧“老农民”在哪拍的 电视剧“老农民”在哪拍的 山东黄河岸边的麦香村
开学趣事 开学趣事初一吃素,初二吃素,初三吃素,初四吃素,初五吃素,初六吃素,初七吃素,初八吃素,初九吃素,初...
孩子上课讲话不认真听讲怎么教育... 孩子上课讲话不认真听讲怎么教育孩子上课讲话不认真听讲怎么办1、对于上课不注意听讲的孩子需要寻找原因,...
求言情小说,总裁和他前妻的故事... 求言情小说,总裁和他前妻的故事?夜蔓:《钟爱》《过期爱情》梅子黄时雨:《江南恨》《最初的爱,最后的爱...
离婚后和已婚男有过几次关系,后... 离婚后和已婚男有过几次关系,后来断了,很后悔,怎么救赎自己?这样的男人没有想过给你一个家。我觉得你应...
首席医官属于哪类书籍 首席医官属于哪类书籍是同一本书,《首席医官》是用银河九天的真名为笔名的出版小说,内容和《首席御医》一...
舍友长得很帅,让我犯嫉妒怎么办 舍友长得很帅,让我犯嫉妒怎么办那你要调整好自己的心态。不要有攀比心理,每个人都是独一无二的,要善于发...
求小说魔族,魔剑,魔沼,魔霸。... 求小说魔族,魔剑,魔沼,魔霸。如何可以找到?版权写的,作者是郭敬明。这四部小说如何找到?郭敬明没写过...
《地下城堡2》中重要道具,向大... 《地下城堡2》中重要道具,向大学士奥杜因交付20000水晶后可以在失落王城获得是什么?是创世之书,可...
ps的文字间距怎么调 ps的文字间距怎么调1,选中文字层,使文字处在编辑下,全选文字。2,按住键盘上的alt键,然后再按方...
宣泰医药与Kalbe Farm... 2025年2月27、28日,上海宣泰医药科技股份有限公司(以下简称“宣泰医药”)商务团队访问了印尼知...
猫武士有多少本?(不是指出版了... 猫武士有多少本?(不是指出版了多少本)作者目前还没有说,你可以问星族!但是出版了39本,24本书,4...
关于一本穿越小说的名字 关于一本穿越小说的名字有个类似的,不知道是不是你要的,《武林高手在校园》,主人公从宋代到现代,是岳飞...
多元化融资助力民企发展 东阳光...     本报记者 田鹏    近日,广东东阳光科技控股股份有限公司(以下简称“东阳光”)在上海证券交...
纪录电影《里斯本丸沉没》走进澳... 转自:新华网  新华社澳门2月28日电(记者刘刚、李寒芳)纪录电影《里斯本丸沉没》导演方励28日先后...
特步第十届321跑步节开幕 3月1日,第十届特步“321跑步节”暨新一代国民碳板跑鞋发布会在重庆奥体中心举办。据悉,特步已连续十...
无论你收入多少,请记得分成五份... ...
冲击全球票房第七名!《哪吒2》... 来源:@华夏时报微博华夏时报记者 于玉金 北京报道并无悬念,《哪吒之魔童闹海》(下称“《哪吒2》”)...
证监会通报!东方集团涉嫌重大财... 北疆财经消息 2月28日晚,中国证券监督管理委员会发布《东方集团财务造假案阶段性调查进展情况》通报。...
刚刚,特朗普、泽连斯基会面!矿... 据央视新闻,当地时间2月28日11时20分许,乌克兰总统泽连斯基抵达白宫,开始与美国总统特朗普举行会...