在Unity中,获取网格,或者在Sprite上获取本地边界?

Fat*_*tie 4 sprite unity-game-engine aabb

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

这是一个所谓的Unity"sprite"(Unity Sprite类)的视觉示例,它是一个瘦的3D对象.

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

显示AABB(绿线).在Unity中,通过.bounds(doco)提供关闭gpu的AABB .如果是CG的新手,解释AABB.

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

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

通常在Unity中,带有可见对象,当你想获得Unity Bounds时,

如果你想在世界空间中使用它们,则renderer.bounds返回世界空间中的Unity Bounds.

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

这是Unity的基础,你会一直这样做.然而.使用新的精灵,也就是说SpriteRenderer,据我所知,没有真正的网格访问权限.

(你实际上可以得到.三角形,但从那里重建绕组和尺寸将是一件非常繁琐的工作.)

那怎么样,你能获得Sprite 的本地 Unity Bounds吗?

(注意它sprite.bounds本身是一样的renderer.bounds,没有帮助.)

Gab*_*ley 5

我想你在找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);
    }
}
Run Code Online (Sandbox Code Playgroud)

例

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