在 Unity 中,获取网格,或以其他方式获取 Sprite 的局部边界?

In Unity, get the mesh, or otherwise get local bounds on a Sprite?

此问题仅与Unity游戏引擎有关

这是一个 所谓的 Unity "sprite"(Unity Sprite class)的视觉示例,它是一个薄的 3D 对象。

显示 AABB(绿线)。在 Unity 中,gpu 的实时 AABB 是通过 .bounds (doco). If new to CG, .

(注意,"local"在Unity中(doco, doco)表示:在父对象的四元数中;"world"表示在场景对象的四元数中。)

现在!对于任何 Unity 工程师阅读:

通常在Unity中,有一个可见的对象,当你想得到Unity Bounds,

如果你想要他们在世界 space,renderer.bounds returns Unity Bounds 在世界 space.

如果你想在本地 space,mesh.bounds returns Unity Bounds 在本地 space。

这是 Unity 的基础,您一直都在做。然而。据我所知,有了新的精灵,也就是说 SpriteRenderer无法真正访问网格

(您实际上可以获得.triangles,但是从那里重建绕组和大小将是一件很麻烦的事情。)

那怎么才能得到雪碧的localUnity Bounds

(请注意,sprite.bounds 本身就是相同的 renderer.bounds,这无济于事。)

我想你正在寻找 SpriteRenderer.sprite.bounds

public class LogBounds : MonoBehaviour {
    void OnGUI () {
        var r = GetComponent<SpriteRenderer>();
        GUILayout.Label("SpriteRenderer.bounds center " + r.bounds.center + " size " + r.bounds.size);
        GUILayout.Label("SpriteRenderer.sprite.bounds center " + r.sprite.bounds.center + " size " + r.sprite.bounds.size);
    }
}

请注意,SpriteRenderer.sprite.bounds 的值不会随着变换属性的更改而更改——这些值在本地坐标中。