【问题标题】:How do I access sprite meta data in Unity?如何在 Unity 中访问精灵元数据?
【发布时间】:2015-01-07 09:12:35
【问题描述】:

我正在使用 Unity 的原生精灵编辑器将纹理分割为精灵表。我希望能够通过脚本获得所有精灵切片的数组。

例如,我想要一个可以像这样使用的 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[],它现在是手动维护的,这对于数百个精灵来说是痛苦的。

任何建议将不胜感激。

【问题讨论】:

  • GameDev 网站上问这个问题可能会更幸运。
  • 看看Resources.LoadAll...我想我明白你的问题...再说一次,也许不是lol...

标签: unity3d editor sprite


【解决方案1】:

一旦您引用了纹理 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 发布的脚本的一部分。

【讨论】:

    【解决方案2】:

    这可能无法回答您关于内置精灵表的具体问题,但我使用的是 TexturePacker(来自 CodeAndWeb)。他们导出一个配置文件,允许您获取与您所要求的内容相似的精灵信息,并提供一个简单的导入器,如果您不需要太多控制,您可以使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      • 2014-10-27
      • 1970-01-01
      相关资源
      最近更新 更多