在Unity中,获取网格,或以其他方式获取Sprite上的本地边界?

时间:2016-03-29 14:31:49

标签: unity3d sprite aabb

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

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

enter image description here enter image description here

显示AABB(绿线)。在Unity中,通过.boundsdoco)提供关闭gpu的实时AABB。如果是CG新手,explanation of AABB

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

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

通常在Unity中,当您想要获取Unity Bounds

时,带有可见对象

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

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

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

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

那么,您如何获得精灵的本地 Unity Bounds

(请注意,sprite.bounds本身与renderer.bounds相同,但没有帮助。)

1 个答案:

答案 0 :(得分: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);
    }
}

example

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