kirin77 发表于 2022-5-29 20:45

Unity SpriteAtlas 打图集流程中的问题和优化总结


[*]xxxx.spriteatlas图集文件的中的数据组成介绍:
[*]packables: 需要打到图集中的子贴图文件列表
[*]    packables:
[*]    - {fileID: 21300000, guid: 478628c2af414fb44a3bac2c7820d9ad, type: 3}
[*]    - {fileID: 21300000, guid: 4f96880b7f3b2b941aa951cae5268e08, type: 3}

[*]totalSpriteSurfaceArea: 所有贴图所占的大小
[*]m_PackedSprites:已经被生成到图集大贴图中的子贴图文件列表
[*]m_PackedSprites:
[*]- {fileID: 21300000, guid: ac6b84117a872fb4381479a066a6c095, type: 3}
[*]- {fileID: 21300000, guid: c0f83f41e1107f745b6810a95e7e31fd, type: 3}

[*]m_PackedSpriteNamesToIndex:已经被生成到图集大贴图中的子贴图名字到索引的记录
[*]m_PackedSpriteNamesToIndex:
[*]- BuffIconPassive
[*]- DeBuffIcon005


[*]xxxx.spriteatlas 图集特性介绍
[*]创建一个图集,往里添加贴图保存,并不会生成m_PackedSprites 相关数据
[*]m_PackedSprites 数据没有生成前,无法根据图集获取子贴图数据,也就是无法真正使用该图集
[*]生成 m_PackedSprites 数据后才可以看预览子贴图在图集中实际填充情况
[*]生成 m_PackedSprites 数据的2种现成方式:
[*]点击图集的inspector中的 Pack Preview 按钮
[*]运行时编辑器自动检查,生成所有相关图集的 m_PackedSprites 数据


[*]代表m_PackedSprites数据是否生成过的哈希文件缓存机制:
[*]作用:在图集内容和配置不变的情况,不重新生成数据(打大量图集时,启动游戏生成较慢)
[*]文件名是一个哈希值:根据图集内容和配置计算生成
[*]工程下存放的目录Library\AtlasCache\下
[*]哈希值不变的情况下,点击Pack Preview 按钮 也不会重新生成

[*]项目开发工具一键生成图集面临的问题:
[*]生成图集后怎么自动生成m_PackedSprites 数据:
[*]调用生成接口:SpriteAtlasUtility.PackAtlases(spriteAtlases.ToArray(), activeBuildTarget, true);

[*]重新打已有图集内容和配置不变的情况下,怎么重新生成m_PackedSprites 数据
[*]图集文件被重新生成,带来是的m_PackedSprites 字段的数据被清除
[*]因为缓存下已有对应的哈希文件,就算调用SpriteAtlasUtility.PackAtlases 底层也不会执行生成过程
[*]解决方案:
[*]获取图集关联的哈希值:调用接口SpriteAtlasExtensions.GetStoredHash获得图集的哈希值,此接口只能通用反射来调用
[*]根据哈希值删掉AtlasCache 目录下对应的文件
[*]再调用SpriteAtlasUtility.PackAtlases 生成数据



[*]清除缓存哈希文件的具体实现


6. 使用代码生成图集的 Packed Texture 的集中说明 ,代替Pack Preview ( select the Pack Preview button under the Objects for Packing list to generate the packed Texture.)

[*](全新图集不需要)获取图集关联的哈希值:调用接口SpriteAtlasExtensions.GetStoredHash获得图集的哈希值,此接口只能通用反射来调用
[*](全新图集不需要)根据哈希值删掉AtlasCache 目录下对应的文件
[*]设置图集为Dirty:EditorUtility.SetDirty(spriteAtlas); (不然不会执行生成流程)
[*]再调用SpriteAtlasUtility.PackAtlases 生成数据

xiangtingsl 发表于 2022-5-29 20:52

请问什么情况下会出现配置不变 图集需要重新打的需求
页: [1]
查看完整版本: Unity SpriteAtlas 打图集流程中的问题和优化总结