此问题仅与Unity游戏引擎相关。
这是一个所谓的Unity" sprite" (Unity Sprite类)的视觉示例,它是一个瘦3D对象。
显示AABB(绿线)。在Unity中,通过.bounds
(doco)提供关闭gpu的实时AABB。如果是CG新手,explanation of AABB。
(注意,"本地"在Unity中(doco,doco)表示:在父对象的四元数中;" world"表示在场景对象的四元数。)
现在!任何Unity工程师阅读:
通常在Unity中,当您想要获取Unity Bounds,
时,带有可见对象如果您希望它们位于世界空间中,renderer.bounds
会返回世界空间中的Unity Bounds。
如果您希望它们位于本地空间,mesh.bounds
会返回本地空间中的Unity Bounds。
这是Unity的基础,你会一直这样做。然而。使用新的精灵,也就是说SpriteRenderer
,据我所知,无法真正访问网格。
(你实际上可以得到。三角形,但从那里重建绕组和尺寸将是一件非常繁琐的工作。)
那么,您如何获得精灵的本地 Unity Bounds?
(请注意,sprite.bounds
本身与renderer.bounds
相同,但没有帮助。)
答案 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);
}
}
请注意,SpriteRenderer.sprite.bounds的值不会随着变换属性的更改而改变 - 这些值都在本地坐标中。