Es gibt keine native API einzelne Sprite aus dem SpriteRenderer
und keine API für den Zugriff auf einzelne Sprite zu erhalten, indem Name. Sie können für diese Funktion abstimmen here.
Sie können Ihre eigene API erstellen, um ein einzelnes Sprite von Atlas im Ordner Resources
wie das in Ihrer Frage enthaltene Bild zu erhalten.
Sie können alle Sprites aus dem Atlas mit laden und dann in einem Wörterbuch speichern.Eine einfache Funktion kann dann verwendet werden, um auf jeden sprite
mit dem angegebenen Namen zuzugreifen.
Ein einfacher Atlas Loader Skript:
public class AtlasLoader
{
public Dictionary<string, Sprite> spriteDic = new Dictionary<string, Sprite>();
//Creates new Instance only, Manually call the loadSprite function later on
public AtlasLoader()
{
}
//Creates new Instance and Loads the provided sprites
public AtlasLoader(string spriteBaseName)
{
loadSprite(spriteBaseName);
}
//Loads the provided sprites
public void loadSprite(string spriteBaseName)
{
Sprite[] allSprites = Resources.LoadAll<Sprite>(spriteBaseName);
if (allSprites == null || allSprites.Length <= 0)
{
Debug.LogError("The Provided Base-Atlas Sprite `" + spriteBaseName + "` does not exist!");
return;
}
for (int i = 0; i < allSprites.Length; i++)
{
spriteDic.Add(allSprites[i].name, allSprites[i]);
}
}
//Get the provided atlas from the loaded sprites
public Sprite getAtlas(string atlasName)
{
Sprite tempSprite;
if (!spriteDic.TryGetValue(atlasName, out tempSprite))
{
Debug.LogError("The Provided atlas `" + atlasName + "` does not exist!");
return null;
}
return tempSprite;
}
//Returns number of sprites in the Atlas
public int atlasCount()
{
return spriteDic.Count;
}
}
Nutzungs:
Mit dem Beispielbild oben "Fliese" ist das Basisbild und Ball, unten, menschen und Wallframe sind die Sprites im Atlas.
void Start()
{
AtlasLoader atlasLoader = new AtlasLoader("tiles");
Debug.Log("Atlas Count: " + atlasLoader.atlasCount());
Sprite ball = atlasLoader.getAtlas("ball");
Sprite bottom = atlasLoader.getAtlas("bottom");
Sprite people = atlasLoader.getAtlas("people");
Sprite wallframe = atlasLoader.getAtlas("wallframe");
}
Nein, das geht nicht. Beachten Sie, dass das Sprite in dieser Frage ein einzelner Sprite ist, der mit dem Sprite-Editor von Unity in Stücke geschnitten wurde. Diese Lösung funktioniert nicht wie Håvard Nygårds [Lösung] (https://stackoverflow.com/a/41315125/3785314). – Programmer