【Sprite Atlas】Unity新圖集系統SpriteAtlas超詳細使用教程

SpriteAtlas是Unity新出的一個功能,用來取代舊版的Sprite Packer。

圖集打包的意義:

  1. 減少DrawCall
  2. 圖集將圖片打包爲2的冪次方的素材大小,可以提升性能
  3. 減小包體大小

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中的其他精靈。

  1. 要將圖片打包進圖集,請選擇Atlas資產,然後通過點擊+號添加到列表或將其從“Project”窗口拖放到列表區域來添加它們。您可以將文件夾,紋理,精靈添加到地圖集。

  2. 爲生成的圖集設置所需的設置。更改設置將始終將此地圖集標記爲已修改,並且將在打包階段再次打包。

  3. 可以通過按檢查器中的“Pack Preview”按鈕預覽打包的圖集。這將觸發此地圖集的打包。一旦打包完成,紋理將出現在預覽部分。

  4. 在進入“播放模式”之前,將重新打包了所有修改了設置的圖集(如果選擇了“ 始終啓用”)。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章