AtlasImage
is a graphic component use SpriteAtlas
for uGUI.
In addition, add useful sprite picker
and border editor
to the inspector.
<< Description | Demo | Download | Usage | Development Note | Change log >>
Are you still fatigued with SpriteAtlas
and Image
?
- No interface for SpriteAtlas
- Support only
Sprite
. - We pack sprites for drawing call optimization, but there is no interface.
- Support only
- Confusing sprite picker
- You can select sprites using object picker.
- Opject picker displays all sprites in the project...
- Do you know which sprite is included in atlas?
- Troublesome border setting
- You can edit sprite border using sprite editor.
- It is troublesome to select a sprite, open a sprite editor, and edit the border.
AtlasImage
provides useful feature to use SpriteAtlas
for UI!
atlasImage.spriteAtlas = Resources.Load("A SpriteAtlas name") as SpriteAtlas;
atlasImage.spriteName = "A sprite name in the SpriteAtlas";
- Download
AtlasImage.unitypackage
from Releases. - Import the package into your Unity project. Go to
Assets > Import Package > Custom Package
and selectAtlasImage.unitypackage
. - Enable SpriteAtlas. Go to
Edit > Project Settings > Editor
, and change the sprite packing mode from Disabled to either:- Enabled for Builds, when you want to use packing for builds only and not when in Play mode.
- Always Enabled when you want the packed Sprite to resolve its texture from the Sprite Atlas during Play mode, but resolve its texture from the original Texture during Edit mode.
- Add
AtlasImage
component instead ofImage
component fromAdd Component
in inspector. - Select the
SpriteAtlas
by dropdown manu, and select the sprite with object piker. - Enjoy!
- Unity 2017.1+
- No other SDK are required
- Pack atlas on open select sprite window.
static void PackAtlas(SpriteAtlas atlas)
{
System.Type
.GetType("UnityEditor.U2D.SpriteAtlasUtility, UnityEditor")
.GetMethod("PackAtlases", BindingFlags.NonPublic | BindingFlags.Static)
.Invoke(null, new object[]{ new []{ atlas }, EditorUserBuildSettings.activeBuildTarget });
}
- Add label
<atlas-guid>
to sprites in atlas.
static string SetAtlasLabelToSprites(SpriteAtlas atlas, bool add)
{
// GUID for the atlas.
string[] atlasLabel = { AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(atlas)) };
// Packed sprites in atlas.
SerializedProperty spPackedSprites = new SerializedObject(atlas).FindProperty("m_PackedSprites");
Sprite[] sprites = Enumerable.Range(0, spPackedSprites.arraySize)
.Select(index => spPackedSprites.GetArrayElementAtIndex(index).objectReferenceValue)
.OfType<Sprite>()
.ToArray();
// Add/remove label to sprites.
foreach (var s in sprites)
{
string[] newLabels = add
? AssetDatabase.GetLabels(s).Union(atlasLabel).ToArray()
: AssetDatabase.GetLabels(s).Except(atlasLabel).ToArray();
AssetDatabase.SetLabels(s, newLabels);
}
return atlasLabel[0];
}
- Open the object picker with label. It filter the sprites to display.
EditorGUIUtility.ShowObjectPicker<Sprite>(atlas.GetSprite(spriteName), false, "l:" + atlasLabel, controlID);
- On closed the object picker, remove label from sprites in atlas.
- GitHub page : https://github.com/mob-sakai/AtlasImage
- Releases : https://github.com/mob-sakai/AtlasImage/releases
- Issue tracker : https://github.com/mob-sakai/AtlasImage/issues
- Current project : https://github.com/mob-sakai/AtlasImage/projects/1
- Change log : https://github.com/mob-sakai/AtlasImage/blob/master/CHANGELOG.md