SpriteAtlas是Unity新出的一個功能,用來取代舊版的Sprite Packer。
圖集打包的意義:
- 減少DrawCall
- 圖集將圖片打包爲2的冪次方的素材大小,可以提升性能
- 減小包體大小
Sprite Packer(舊版本)缺點:
舊版Sprite Packer在性能和易用性上對比Sprite Atlas存在諸多不足,比如無法分別對不同圖集修改不同質量、無法獲取圖集裏的圖片等等。
Sprite Packer可參照我寫的另外一個文章
新版Sprite Atlas如何使用:
1、Edit-Project Setting-Editor/SpritePacker打開設置(設置爲Enabled For Builds或者Always Enabled,第二三項是SpritePacker使用的)
2、創建圖集
在Project窗口右鍵,Create->Sprite Atlas或者 Asset -> Create -> Sprite Atlas
3、屬性面板介紹
屬性 | 功能 |
---|---|
Type | 將圖集的類型設置爲“主圖集”或“變體圖集”。 |
Include in build | 始終在構建中包括Atlas資產。 |
Allow Rotation | 允許旋轉精靈進行包裝 |
Tight Packing | 非矩形包裝 |
Read/Write Enabled | 如果要從腳本讀取紋理數據,請將其設置爲true。將其設置爲false可以防止腳本讀取紋理數據。 |
Generate Mip Maps | 選擇此選項可啓用Mip-Map生成。Mip貼圖是Texture的較小版本,當Texture在屏幕上很小時會使用。 |
Filter Mode | 選擇如何過濾紋理 |
Platform-specific overrides panel | 使用特定於平臺的替代面板設置默認選項(使用默認),然後使用面板頂部的按鈕針對特定平臺替代它們。 https://docs.unity3d.com/Manual/class-TextureImporterOverride.html |
Objects For Packing | 包裝好的地圖集中要包含的對象。文件夾,紋理或單個圖片可以添加到列表中。 |
4、添加圖片到圖集
可以將文件夾,紋理或精靈指定給Sprite Atlas。可以將整個文件夾分配給Sprite Atlas資產,該文件夾中的所有紋理(包括子文件夾)都將打包。分配單個紋理時,將包括所有定義的精靈。也可以將單個精靈指定給地圖集,並且不會考慮同一Texture中的其他精靈。
-
要將圖片打包進圖集,請選擇Atlas資產,然後通過點擊+號添加到列表或將其從“Project”窗口拖放到列表區域來添加它們。您可以將文件夾,紋理,精靈添加到地圖集。
-
爲生成的圖集設置所需的設置。更改設置將始終將此地圖集標記爲已修改,並且將在打包階段再次打包。
-
可以通過按檢查器中的“Pack Preview”按鈕預覽打包的圖集。這將觸發此地圖集的打包。一旦打包完成,紋理將出現在預覽部分。
-
在進入“播放模式”之前,將重新打包了所有修改了設置的圖集(如果選擇了“ 始終啓用”)。
5、高清/低清資源切換
創建新的Sprite Atlas,然後設置Type爲變種(Variant)類型,並設置關聯的Master Atlas,修改Scale即可改變分辨率。
使用代碼訪問Sprite Atlas接口
1、創建Sprite Atlas
var spriteAtlas=new SpriteAtlas();
AssetDatabase.CreateAsset(spriteAtlas, "Assets/sample.spriteatlas");
2、添加圖片到Sprite Atlas圖集
var spriteAtlas=new SpriteAtlas();
var sprite = AssetDatabase.LoadAssetAtPath<Sprite>(assetPath);
List<Object> packables = new List<Object>(spriteAtlas.GetPackables());
if (!packables.Contains(sprite))
{
spriteAtlas.Add(new Object[] {sprite});
}
3、改變默認Sprite Atlas圖集設置(Max Texture Size、Format、Compression)
var spriteAtlas=new SpriteAtlas();
var atlasSetting = spriteAtlas.GetPlatformSettings("DefaultTexturePlatform");
atlasSetting.maxTextureSize = 4096;
atlasSetting.textureCompression = TextureImporterCompression.CompressedHQ;
atlasSetting.format = TextureImporterFormat.RGBA32;
spriteAtlas.SetPlatformSettings(atlasSetting);
4、改變不同平臺圖集設置
spriteAtlas.GetPlatformSettings支持的參數名有 "Standalone", "Web", "iPhone", "Android", "WebGL", "Windows Store Apps", "PS4", "PSM", "XboxOne", "Nintendo 3DS" and "tvOS"
void Test()
{
var spriteAtlas=new SpriteAtlas();
var atlasSetting = spriteAtlas.GetPlatformSettings(GetPlatformName(EditorUserBuildSettings.activeBuildTarget));
atlasSetting.maxTextureSize = 4096;
atlasSetting.textureCompression = TextureImporterCompression.CompressedHQ;
atlasSetting.format = TextureImporterFormat.RGBA32;
spriteAtlas.SetPlatformSettings(atlasSetting);
}
string GetPlatformName(BuildTarget target)
{
string platformName = "";
switch (target)
{
case BuildTarget.Android:
platformName = "Android";
break;
case BuildTarget.iOS:
platformName = "iPhone";
break;
case BuildTarget.PS4:
platformName = "PS4";
break;
case BuildTarget.XboxOne:
platformName = "XboxOne";
break;
case BuildTarget.NoTarget:
platformName = "DefaultTexturePlatform";
break;
default:
platformName = "Standalone";
break;
}
return platformName;
}
5、更多API可參考官網API