【问题标题】:Loading all sub-sprites of a sprite加载精灵的所有子精灵
【发布时间】:2019-04-25 17:02:59
【问题描述】:

我正在尝试将给定精灵渲染器中当前精灵的所有精灵加载到一个对象上,但是无论我尝试什么,我都无法加载每个单独的精灵(具有多个“帧”的二维精灵,即精灵表) .

我用过

Resources.LoadAll<Sprite>(AssetDatabase.GetAssetPath(spriteRenderer.sprite.GetInstanceID()).Replace(".png", ""));

甚至

Resources.LoadAll<Sprite>(Path);

但我似乎无法让它加载我想要的东西(通常它根本不起作用,但在旧版本的 Unity 上它加载了圆形加载条和错误标志)。我已经创建了精灵的帧/子精灵。

我尝试将路径更改为仅使用精灵的名称以将文件类型包含到其他任何内容中,但没有任何效果。 如果这很重要,我正在使用 Unity 2019.1.0f2。

【问题讨论】:

  • 这通常看起来是正确的,但是 iirc,Resources.LoadAll 需要一个相对于 Resources 文件夹的路径,而 GetAssetPath 返回一个相对于 Assets 文件夹的路径。这可能是关键吗?
  • 什么意思?比如,使用“Sprites/file”而不是“Assets/Sprites/file”?

标签: c# unity3d resources sprite


【解决方案1】:

所以你想加载一堆精灵对吗?
你试过吗?

Sprite[] loadedSprites = Resources.LoadAll("Sprites", typeof(Sprite));

如果你使用它,你的 unity 必须有一个名为 Resources 的文件夹。基本上它在 LoadAll 中的第一个参数是这样说的:“Resources/Sprites”,然后它会在 Sprite 文件夹中查找所有属于 Sprite 的类型。

注意:确保所有计划使用的 .png 文件都被签名为 Sprite(2D 和 UI),这可以通过单击统一的 png 来完成,右上角会显示纹理类型。

【讨论】:

  • 我正在尝试获取精灵的子精灵,而不是一组精灵。精灵被列为 2D 精灵,并且精灵模式为“Multiple”,然后精灵表的每一帧都有自己的精灵(使用精灵编辑器按钮)。
  • 哦,现在我明白了,但奇怪的是这不起作用:Resources.LoadAll(Path);
  • 也许这有帮助?这家伙用 system.Linq answers.unity.com/answers/1175313/view.html
【解决方案2】:

结果只是一个简单的误解。 我的文件夹都在“资产”文件夹中,而它们应该在“资产/资源”文件夹中。现在我可以使用

加载精灵渲染器的精灵
spriteRenderer.sprite.GetInstanceID()).Replace(".png","").Replace("Assets/Resources/","")

虽然有点长,但是很有效!

感谢 Louis Ingenthron 的提示!

【讨论】: