unity assetbundle 加载图集的所有sprite图片
在 Unity 中,使用 AssetBundle 加载图集(Atlas)并获取其中的所有 Sprite 图片,通常需要以下步骤:
1. 打包图集到 AssetBundle
首先,确保你的图集(Atlas)已经被打包到 AssetBundle 中。图集通常是一个包含多个 Sprite 的纹理(Texture),并且每个 Sprite 都有对应的元数据(如 UV 坐标、Pivot 等)。
2. 加载 AssetBundle
使用 AssetBundle.LoadFromFile
或 AssetBundle.LoadFromMemoryAsync
等方法加载 AssetBundle。
- using UnityEngine;
- using System.Collections;
- public class LoadSpriteFromAssetBundle : MonoBehaviour
- {
- private AssetBundle assetBundle;
- IEnumerator Start()
- {
- string path = Application.streamingAssetsPath + "/your_assetbundle_name";
- var request = AssetBundle.LoadFromFileAsync(path);
- yield return request;
- assetBundle = request.assetBundle;
- if (assetBundle == null)
- {
- Debug.LogError("Failed to load AssetBundle");
- yield break;
- }
- // 加载图集中的所有 Sprite
- LoadSpritesFromAtlas();
- }
- }
3. 加载图集中的所有 Sprite
图集通常是一个包含多个 Sprite 的纹理(Texture)。你可以通过以下方式加载图集中的所有 Sprite:
方法 1:使用 LoadAllAssets<Sprite>
如果图集中的 Sprite 被打包为独立的资源,可以使用 LoadAllAssets<Sprite>
方法加载所有 Sprite。
- private void LoadSpritesFromAtlas()
- {
- // 加载图集中的所有 Sprite
- Sprite[] sprites = assetBundle.LoadAllAssets<Sprite>();
- foreach (Sprite sprite in sprites)
- {
- Debug.Log("Loaded Sprite: " + sprite.name);
- // 可以将 Sprite 赋值给 UI Image 或其他用途
- }
- }
方法 2:加载图集纹理并手动分割
如果图集是一个单独的纹理,并且 Sprite 的元数据没有被打包到 AssetBundle 中,你需要手动加载纹理并根据 UV 坐标分割 Sprite。
- private void LoadSpritesFromAtlas()
- {
- // 加载图集纹理
- Texture2D atlasTexture = assetBundle.LoadAsset<Texture2D>("atlas_texture_name");
- // 假设你知道图集中每个 Sprite 的 UV 坐标和大小
- Rect[] spriteRects = new Rect[]
- {
- new Rect(0, 0, 64, 64), // Sprite 1 的 UV 坐标和大小
- new Rect(64, 0, 64, 64), // Sprite 2 的 UV 坐标和大小
- // 添加更多 Sprite 的 UV 坐标
- };
- // 创建 Sprite
- foreach (Rect rect in spriteRects)
- {
- Sprite sprite = Sprite.Create(atlasTexture, rect, new Vector2(0.5f, 0.5f));
- Debug.Log("Created Sprite: " + sprite.name);
- // 可以将 Sprite 赋值给 UI Image 或其他用途
- }
- }
4. 卸载 AssetBundle
- private void OnDestroy()
- {
- if (assetBundle != null)
- {
- assetBundle.Unload(false); // false 表示不卸载从 AssetBundle 加载的资源
- }
- }
注意事项
图集打包方式:
如果图集中的 Sprite 被打包为独立的资源,可以直接使用
LoadAllAssets<Sprite>
。如果图集是一个单独的纹理,需要手动分割 Sprite。
AssetBundle 依赖:
如果图集依赖于其他资源(如材质、Shader 等),确保这些依赖资源也被正确加载。
内存管理:
加载 AssetBundle 后,及时卸载不再需要的资源,避免内存泄漏。
异步加载:
如果 AssetBundle 较大,建议使用异步加载(如
LoadFromFileAsync
)以避免卡顿。
完整示例
以下是一个完整的示例代码:
- using UnityEngine;
- using System.Collections;
- public class LoadSpriteFromAssetBundle : MonoBehaviour
- {
- private AssetBundle assetBundle;
- IEnumerator Start()
- {
- string path = Application.streamingAssetsPath + "/your_assetbundle_name";
- var request = AssetBundle.LoadFromFileAsync(path);
- yield return request;
- assetBundle = request.assetBundle;
- if (assetBundle == null)
- {
- Debug.LogError("Failed to load AssetBundle");
- yield break;
- }
- // 加载图集中的所有 Sprite
- LoadSpritesFromAtlas();
- }
- private void LoadSpritesFromAtlas()
- {
- // 加载图集中的所有 Sprite
- Sprite[] sprites = assetBundle.LoadAllAssets<Sprite>();
- foreach (Sprite sprite in sprites)
- {
- Debug.Log("Loaded Sprite: " + sprite.name);
- // 可以将 Sprite 赋值给 UI Image 或其他用途
- }
- }
- private void OnDestroy()
- {
- if (assetBundle != null)
- {
- assetBundle.Unload(false); // false 表示不卸载从 AssetBundle 加载的资源
- }
- }
- }
通过以上方法,你可以从 AssetBundle 中加载图集并获取其中的所有 Sprite 图片。
unity assetbundle 加载图集的所有sprite图片的更多相关文章
- Unity动态加载和内存管理(三合一)
原址:http://game.ceeger.com/forum/read.php?tid=4394#info 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Re ...
- AssetBundle加载API
AssetBundle加载API 在Unity 5当中,可以通过4个不同的API来加载AssetBundle,4个API可以用两个条件来区分: AssetBundle是 LZMA压缩. LZ4压缩还是 ...
- unity动态加载(翻译) .
AssetBundles are files which you can export from Unity to contain assets of your choice. These files ...
- 细谈unity资源加载和卸载
转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 在了解unity的资源管理方式之后,接下来细谈一下Unity的资源是如何从磁盘中加载到运行时的内存中,以及又是如 ...
- Dll的编写 在unity中加载
1. 在VS中新建Dll项目 2.在头文件中对函数进行声明 extern "C" int _declspec(dllexport) testunity(); 3.在源文件中写函数体 ...
- wp加载本地HTML(附带图片,CSS,JS)
wp加载本地HTML(附带图片,CSS,JS) Windows Phone:Load Local HTML with Img,Css,Js by 唐小崇 http://www.cnblogs.com/ ...
- 测试页面,页面里边一次加载50张不同的图片,每张5M以上,查看浏览器的内存使用情况
测试页面 1.需要你写个测试页面,页面里边一次加载50张不同的图片,每张5M,查看浏览器的内存使用情况 2.可以10张 递增的方式测试 3.图片需要缩放,比如所有图片缩放成600*800的比例 目的 ...
- jquery文档加载几种写法,图片加载写法
jquery文档加载写法: $(function(){ }) ; //个人最常使用方式 $(document).ready(function(){ }); //调用文档对象下的ready方法传入一个函 ...
- RecyclerView加载更多用notifyDataSetChanged()刷新图片闪烁
首先来看看对比ListView看一下RecyclerView的Adapter主要增加了哪些方法: notifyItemChanged(int position) 更新列表position位置上的数据可 ...
- 动态加载/删除css文件以及图片预加载
动态加载/删除css文件以及图片预加载 功能模块页面 最近,工作中遇到了一个比较奇葩的需求:要在一个页面(PC端)增加一个功能模块,但是这个页面在不久之后要重构,为了新增加的模块可以继续复用, ...
随机推荐
- Power BI 通过输入数据新建表后重新进入编辑状态
在使用Power BI时,有时候我们会直接通过输入数据构建一些简单的表,但是构建好后我们可能还需要对表格进行增删改的操作,这时候我们需要怎么才会恢复到表格的编辑状态呢?其实很简单,我们回到PQ里面,双 ...
- 鸿蒙Banner图一多适配不同屏幕
认识一多 随着终端设备形态日益多样化,分布式技术逐渐打破单一硬件边界,一个应用或服务,可以在不同的硬件设备之间随意调用.互助共享,让用户享受无缝的全场景体验.而作为应用开发者,广泛的设备类型也能为应用 ...
- .NET 9 发布 性能提升、AI 支持与全方位改进
前言 .NET 9 正式发布,这是迄今为止最高效.现代.安全.智能且高性能的 .NET 版本. 新版本凝聚了全球数千名开发者的共同努力,包含了数千项性能.安全性和功能性改进. 主要亮点 性能提升:全面 ...
- IDEA常用插件推荐
IDEA支持特别多的插件,今天记录一下我常用的插件.欢迎在评论区推荐更多插件!!! 1.Translation - 必备翻译插件 基于 IntelliJ 的 IDE 的翻译插件 推荐指数: 插件链接: ...
- mysql8创建用户
create user test_user@'%' identified by 'test2022@'; grant all privileges on test.* to test_user@'%' ...
- MySQL创新版9.1.0于2024年10月15日正式发布-新功能特性先睹为快[译]
这个十月发布的版本是MySQL宣布转向新的LTS/Innovation发布模式后的第三个长期支持(LTS)版本和第二个创新(Innovation)版本.更多细节请参见MySQL发布:创新和长期支持.在 ...
- YOLOv8-PyQT5可视化界面
使用PyQT5实现YOLOv8图形化界面 准备工作: 1.首先在YOLOv8环境中安装pyqt5 pip install pyqt5 pip install pyqt5-tools 然后再你的anac ...
- 基于golang的swagger
Swagger 相关的工具集会根据 OpenAPI 规范去生成各式各类的与接口相关联的内容,常见的流程是编写注解 =>调用生成库->生成标准描述文件 =>生成/导入到对应的 Swag ...
- Golang常见问题汇总
在开始使用golang的时候,经常会遇到各种问题,总结在此 1.unrecognized import path "golang.org/x/.. golang 在 github 上建立了一 ...
- 如何在wpf窗口中播放PPT。
前一段时间接到一个需求(大概内容讲一下): 将PPT播放窗口嵌入到我们的系统中,用自己系统控制PPT的播放,在PPT页面上可以手写将手写内容记录下来. 一开始,对于WPF还是一个彩笔的我是懵逼的.后来 ...