如何在Unity中访问精灵元数据?

时间:2014-11-10 22:44:26

标签: unity3d editor sprite

我正在使用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 [],这对于数百个精灵来说是痛苦的。

任何建议都将受到赞赏。

2 个答案:

答案 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)。他们导出一个配置文件,允许您获取类似于您所要求的精灵信息,并提供一个简单的导入器,如果您不需要太多控制,可以使用它。