Unity编辑器拓展之二十二:基于TexturePacker的一键打图集工具
NGUI使用TexturePacker打图集是一件频繁且费时的工作,只要美术稍一更新图片,就需要重新打图集,而且每次打图集的操作其实都是一样的重复劳动,基于此,开发工具批量打图集时很有必要的。
使用TexturePacker打图集,会输出两个文件,一个PNG合图,一个txt图集信息文件,而到Unity中使用UIAtlas,则需要一个Material材质文件和一个Prefab预制体文件,这两个文件也由工具生成。
鉴于项目不是从一开始就用该工具进行打图集工作的,因此这些文件的命名不具有统一的规范,因此使用一个配置文件来记录每个图集的输出文件信息。
Atlas.ini图集配置文件
该文件以CSV格式进行配置,共有5列,图片文件夹相对路径、PNG合图输出路径、txt图集信息文件输出路径、UIAtlasPrefab输出路径、Material材质输出路径,后面四个输出路径都是基于Unity工程的Assets目录。
命令行打图集
TexturePacker支持使用命令行打图集
$TexturePacker_PATH $imgDir --max-size 4096 --allow-free-size --format unity --size-constraints POT --shape-padding 2 --border-padding 2 --common-divisor-x 1 --common-divisor-y 1 --disable-rotation --algorithm MaxRects --opt RGBA8888 --scale 1 --scale-mode Smooth --smart-update --sheet $ASSETS_PATH$atlasPng --data $ASSETS_PATH$atlasData
详细命令行介绍请自行搜索相关文档
一键批量设置图片资源设置
PNG合图文件输出到Unity后,通过使用Unity提供的TextureImporter类和TextImporterPlatformSetting类进行图片设置
生成材质和Prefab问阿金并自动关联引用
材质使用的Shader是“Unlit/Transparent Colored”,mainTexture则为TexturePacker输出的合图,创建Prefab,并Add UIAtlas Component,给UIAtlas组件导入texture和txt图集信息文件
NGUIEditorTools.ImportTexture(uiAtlas.texture, false, false, !uiAtlas.premultipliedAlpha);
NGUIJson.LoadSpriteData(uiAtlas, atlasTextAsset);
UIAtlas信息拷贝
创建图集后,有时需要拷贝另一个图集的border和padding信息,例如两个图集内容其实是一直的,只是皮肤颜色不一样(换肤图集),因此这两个图集的border和padding数据是一样的,提供工具进行数据拷贝。
清理Editor进度条
为避免Atlas.ini配置错误,导致打图集中断,而EditorUtility.DisplayProgressBar进度条无法清除,提供Editor进度条清理功能,菜单栏Tools->清理进度条
工程下载
GitHub地址:https://github.com/JingFengJi/CreateAtlas
以上知识分享,如有错误,欢迎指出,共同学习,共同进步。