UIWidget和Renderer获取实际像素边界

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本身的机制是一样的。

UIWidget和Renderer获取实际像素边界.png

奇奇爱说话中,蛋糕的擦除就是一个例子,蛋糕的大小在自动缩放后,为了能够正确擦除,需要获取到像素边界。

你可能感兴趣的:(UIWidget和Renderer获取实际像素边界)