我正在使用Unity的原生精灵编辑器将纹理切割为spritesheet。我希望能够通过脚本获得所有精灵切片的数组。
例如,我希望有一个可以像这样使用的SpriteSheet类。
class MyClass
// Drag sprite sheet from assets to this inspector slot.
public SpriteSheet spritesheet;
void Awake() {
foreach(Sprite sprite in spritesheet.sprites) {
... do something with sprite
}
}
}
但似乎精灵表只不过是一个与之相关的.meta的Texture2D。有一个具有spritesheet属性的TextureImporter类,但如何在运行时访问TextureImporter?即使我可以在EditTime期间访问,我也可以用它来填充一个现在正在手工维护的Sprite [],这对于数百个精灵来说是痛苦的。
任何建议都将受到赞赏。
答案 0 :(得分:2)
一旦你有一个纹理2d的引用:
Texture2D texture = ...;
你可以这样做:
string path = AssetDatabase.GetAssetPath(texture);
TextureImporter ti = AssetImporter.GetAtPath(path) as TextureImporter;
ti.isReadable = true;
List < SpriteMetaData > newData = new List < SpriteMetaData > ();
for (int i = 0; i < ti.spritesheet.Length; i++) {
SpriteMetaData d = ti.spritesheet[i];
//do whatever you want with the metadata...
newData.Add(d);
}
ti.spritesheet = newData.ToArray();
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
这是发布here的脚本的一部分。
答案 1 :(得分:0)
这可能没有回答你关于内置精灵表的具体问题,但我使用的是TexturePacker(来自CodeAndWeb)。他们导出一个配置文件,允许您获取类似于您所要求的精灵信息,并提供一个简单的导入器,如果您不需要太多控制,可以使用它。