从精灵图集中获取单个精灵
Get single sprite from sprite atlas
我想要获取 GameObject 在 SpriteRenderer 组件中的单个精灵。
不幸的是,这段代码 returns 整个图集,但我需要这个图集的一部分。
Texture2D thumbnail = GetComponent<SpriteRenderer>().sprite.texture;
您可以将需要的图片单独放在Resources文件夹中,然后使用Resources.Load("spriteName")获取。如果你想把它作为一个精灵,你会做以下事情:
Sprite thumbnail = Resources.Load("spriteName", typeof(Sprite)) as Sprite;
来源:https://forum.unity3d.com/threads/how-to-change-sprite-image-from-script.212307/
没有本地 API 从 SpriteRenderer
获取单个精灵,也没有 API 按名称访问单个精灵。您可以为这个功能投票here。
您可以制作自己的 API 以从位于 Resources
文件夹中的 Atlas 获取单个精灵,就像您问题中包含的图像一样。
您可以使用 Resources.LoadAll
从 Atlas 加载所有精灵,然后将它们存储在 dictionary.A 中,然后可以使用简单的函数访问每个 sprite
提供的名称。
一个简单的 Atlas Loader 脚本:
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;
}
}
用法:
对于上面的示例图像,“tile”是基础图像,ball、bottom、people、wallframe是图集中的精灵。
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");
}
有了新的 Unity 版本,您可以使用 SpriteAtlas class 和 GetSprite 方法轻松完成:
https://docs.unity3d.com/ScriptReference/U2D.SpriteAtlas.html
因此,如果您正在使用 Resources 文件夹,您可以执行以下操作:
Resources.Load<SpriteAtlas>("AtlasName")
我想要获取 GameObject 在 SpriteRenderer 组件中的单个精灵。 不幸的是,这段代码 returns 整个图集,但我需要这个图集的一部分。
Texture2D thumbnail = GetComponent<SpriteRenderer>().sprite.texture;
您可以将需要的图片单独放在Resources文件夹中,然后使用Resources.Load("spriteName")获取。如果你想把它作为一个精灵,你会做以下事情:
Sprite thumbnail = Resources.Load("spriteName", typeof(Sprite)) as Sprite;
来源:https://forum.unity3d.com/threads/how-to-change-sprite-image-from-script.212307/
没有本地 API 从 SpriteRenderer
获取单个精灵,也没有 API 按名称访问单个精灵。您可以为这个功能投票here。
您可以制作自己的 API 以从位于 Resources
文件夹中的 Atlas 获取单个精灵,就像您问题中包含的图像一样。
您可以使用 Resources.LoadAll
从 Atlas 加载所有精灵,然后将它们存储在 dictionary.A 中,然后可以使用简单的函数访问每个 sprite
提供的名称。
一个简单的 Atlas Loader 脚本:
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;
}
}
用法:
对于上面的示例图像,“tile”是基础图像,ball、bottom、people、wallframe是图集中的精灵。
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");
}
有了新的 Unity 版本,您可以使用 SpriteAtlas class 和 GetSprite 方法轻松完成: https://docs.unity3d.com/ScriptReference/U2D.SpriteAtlas.html
因此,如果您正在使用 Resources 文件夹,您可以执行以下操作:
Resources.Load<SpriteAtlas>("AtlasName")