2using System.Collections.Generic;
7 public static class BoundsUtils
9 public static Bounds CombineBounds(IEnumerable<Renderer> renderers)
12 foreach (var renderer
in renderers)
17 b.Value.Encapsulate(renderer.bounds);
21 throw new ArgumentOutOfRangeException(
"Need at least one renderer");
26 public static Rect BoundsToScreenRect(
this Bounds bounds, Camera camera)
28 var cen = bounds.center;
29 var ext = bounds.extents;
30 var extentPoints =
new Vector2[8]
32 camera.WorldToScreenPoint(
new Vector3(cen.x-ext.x, cen.y-ext.y, cen.z-ext.z)),
33 camera.WorldToScreenPoint(
new Vector3(cen.x+ext.x, cen.y-ext.y, cen.z-ext.z)),
34 camera.WorldToScreenPoint(
new Vector3(cen.x-ext.x, cen.y-ext.y, cen.z+ext.z)),
35 camera.WorldToScreenPoint(
new Vector3(cen.x+ext.x, cen.y-ext.y, cen.z+ext.z)),
36 camera.WorldToScreenPoint(
new Vector3(cen.x-ext.x, cen.y+ext.y, cen.z-ext.z)),
37 camera.WorldToScreenPoint(
new Vector3(cen.x+ext.x, cen.y+ext.y, cen.z-ext.z)),
38 camera.WorldToScreenPoint(
new Vector3(cen.x-ext.x, cen.y+ext.y, cen.z+ext.z)),
39 camera.WorldToScreenPoint(
new Vector3(cen.x+ext.x, cen.y+ext.y, cen.z+ext.z))
42 var min = extentPoints[0];
43 var max = extentPoints[0];
44 foreach (var v
in extentPoints)
50 return new Rect(min.x, min.y, max.x - min.x, max.y - min.y);
53 public static Vector2 WorldToGUIPoint(Vector3 world)
55 var screenPoint = Camera.main.WorldToScreenPoint(world);
56 screenPoint.y = Screen.height - screenPoint.y;