4

这个问题只涉及 Unity 游戏引擎

这是一个所谓的 Unity“精灵”(Unity Sprite 类)的视觉示例,它是一个薄 3D 对象。

在此处输入图像描述 在此处输入图像描述

显示 AABB(绿线)。在 Unity 中,通过.bounds( doco ) 提供脱离 gpu 的实时 AABB。如果是 CG 新手,请解释 AABB

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

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

通常在 Unity 中,使用可见对象时,当您想要获取Unity Bounds时,

如果您希望它们在世界空间中,renderer.bounds则返回世界空间中的Unity Bounds

如果您希望它们在本地空间中,mesh.bounds则返回本地空间中的Unity Bounds

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

(你实际上可以得到 .triangles,但是从那里重建绕组和大小会很麻烦。)

那么,如何获得Sprite的本地 Unity Bounds呢?

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

4

1 回答 1

6

我想你正在寻找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 的值不会随着变换属性的变化而变化——这些值位于局部坐标中。

于 2016-03-29T18:19:24.287 回答