Awesome
Atlas Image
A graphic component use SpriteAtlas
for uGUI.
In addition, add useful sprite picker and border editor to the inspector.
<< Description | Demo | Installation | Usage | Development Note | Change log >>
<br><br><br><br>
Description
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!
Sprite for renderring can be changed with a SpriteAtlas or a sprite name.
atlasImage.spriteAtlas = Resources.Load("A SpriteAtlas name") as SpriteAtlas;
atlasImage.spriteName = "A sprite name in the SpriteAtlas";
In the inspector, sprite picker displays only sprites in the SpriteAtlas.
You can edit the border in the preview window.
Convert Image
to AtlasImage
by context menu.
<br><br><br><br>
Demo
<br><br><br><br>
Installation
Requirement
- Unity 2017.1 or later
(For Unity 2018.3 or later) Using OpenUPM
This package is available on OpenUPM.
You can install it via openupm-cli.
openupm add com.coffee.atlas-image
(For Unity 2018.3 or later) Using Git
Find the manifest.json file in the Packages folder of your project and add a line to dependencies
field.
- Major version:
"com.coffee.atlas-image": "https://github.com/mob-sakai/AtlasImage.git"
To update the package, change suffix #{version}
to the target version.
- e.g.
"com.coffee.atlas-image": "https://github.com/mob-sakai/AtlasImage.git#1.0.0",
Or, use UpmGitExtension to install and update the package.
For Unity 2018.2 or earlier
- Download a source code zip file from Releases page
- Extract it
- Import it into the following directory in your Unity project
Packages
(It works as an embedded package. For Unity 2018.1 or later)Assets
(Legacy way. For Unity 2017.1 or later)
<br><br><br><br>
Usage
- 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!
<br><br><br><br>
Development Note
How to work?
- 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.
<br><br><br><br>
Contributing
Issues
Issues are very valuable to this project.
- Ideas are a valuable source of contributions others can make
- Problems show where this project is lacking
- With a question you show where contributors can improve the user experience
Pull Requests
Pull requests are, a great way to get your ideas into this repository.
See sandbox/README.md.
Support
This is an open source project that I am developing in my spare time.
If you like it, please support me.
With your support, I can spend more time on development. :)
<br><br><br><br>
License
- MIT
Author
See Also
- 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
- Change log : https://github.com/mob-sakai/AtlasImage/blob/main/CHANGELOG.md