Babybus-u3d技术交流-UIWidget和Renderer获取实际像素边界
public static class UIWidgetExtension
{
public static Rect GetScreenRect(this UIWidget widget, Camera camera)
{
Rect rect = new Rect();
Vector3[] worldCorners = widget.worldCorners;
rect.min = camera.WorldToScreenPoint(worldCorners[0]);//bottom-left
rect.max = camera.WorldToScreenPoint(worldCorners[2]);//top-right
return rect;
}
}
public static class RendererExtension
{
public static Rect GetScreenRect(this Renderer renderer, Camera camera)
{
Rect rect = new Rect();
rect.min = camera.WorldToScreenPoint(renderer.bounds.min);//bottom-left
rect.max = camera.WorldToScreenPoint(renderer.bounds.max);//top-right
return rect;
}
}
这是屏幕坐标系,坐标原点在屏幕左下角。
备注:
某些特定需求下,需要获取实际像素边界。比如在3d物体上面嵌入webview,如奇奇爱说话中的电视。
一般NGUI的UIRoot是使用固定高度的模式,因为需要在不同分辨率下能够自动缩放,如在iPad上面大小要比iPhone上面大,跟unity本身的机制是一样的。
奇奇爱说话中,蛋糕的擦除就是一个例子,蛋糕的大小在自动缩放后,为了能够正确擦除,需要获取到像素边界。