找回密码
 立即注册
查看: 270|回复: 1

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

[复制链接]
发表于 2022-5-29 20:45 | 显示全部楼层 |阅读模式

  • 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 生成数据

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-5-29 20:52 | 显示全部楼层
请问什么情况下会出现配置不变 图集需要重新打的需求
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 10:04 , Processed in 0.090863 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表