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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTML标签解释大全 一、HTML标记 标签:!DOCTYPE 说明:指定了 HTML 文档遵循的文档类型定义(D...
    米塔塔阅读 3,355评论 1 41
  • Unity技术面试题 一:什么是协同程序? 答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话...
    沐冉阅读 2,928评论 1 19
  • Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎。它提供了低...
    ShanJiJi阅读 1,615评论 0 20
  • 大学读的几年里几乎没有怎么再接触过写作,感觉已经完全不会写作了,文笔都荒废了,也许本身也没什么文笔,再加上...
    梦也夏雪阅读 809评论 2 0
  • 逼自己是为了放下,放下是为了重新开始;而我弄丢了一些东西,没想过重新开始,所以无所谓放下,也就没有像自己说的那样逼...
    学长酱阅读 179评论 0 0