12using System.Collections;
13using System.Collections.Generic;
22 public static readonly Vector3
PLANE_NORMAL =
new Vector3(0, 0, -1);
42 this.radii = Vector2.one * radius;
59 return Matrix4x4.Translate(
center);
77 get {
return new Vector3(-
radii.x, -
radii.y); }
94 Vector3 unusedPoint_rect;
102 point_rect = this.
matrix.inverse.MultiplyPoint3x4(point);
104 var absPoint_rect = point_rect.Abs();
105 return absPoint_rect.x <=
radii.x && absPoint_rect.y <=
radii.y;
108 #region Corner Enumerator
114 private int _sideIdx;
115 private Vector3 corner00;
116 private Vector3 corner01;
117 private Vector3 corner11;
118 private Vector3 corner10;
131 case 0:
return corner00;
132 case 1:
return corner01;
133 case 2:
return corner11;
134 case 3:
return corner10;
135 default:
return default(Vector3);
149 private int _sideIdx;
150 private Vector3 corner00;
151 private Vector3 corner01;
152 private Vector3 corner11;
153 private Vector3 corner10;
166 case 0:
return corner00;
167 case 1:
return corner01;
168 case 2:
return corner11;
169 case 3:
return corner10;
170 default:
return default(Vector3);
182 #region Side Enumerator
189 private int _sideIdx;
190 private Vector3 corner00;
191 private Vector3 corner01;
192 private Vector3 corner11;
193 private Vector3 corner10;
225 private int _sideIdx;
226 private Vector3 corner00;
227 private Vector3 corner01;
228 private Vector3 corner11;
229 private Vector3 corner10;
258 #region Runtime Gizmos
260 public void DrawLines(Action<Vector3, Vector3> drawLineFunc,
266 a =
matrix.MultiplyPoint3x4(a);
267 b =
matrix.MultiplyPoint3x4(b);
268 c =
matrix.MultiplyPoint3x4(c);
269 d =
matrix.MultiplyPoint3x4(d);
271 divisions = Mathf.Max(1, divisions);
273 var frac = 1 / divisions;
274 drawDividedLines(drawLineFunc, step: frac, a: a, b: b);
275 drawDividedLines(drawLineFunc, step: frac, a: b, b: c);
276 drawDividedLines(drawLineFunc, step: frac, a: c, b: d);
277 drawDividedLines(drawLineFunc, step: frac, a: d, b: a);
288 private void drawDividedLines(System.Action<Vector3, Vector3> draw,
289 float step, Vector3 a, Vector3 b)
291 step = Mathf.Max(0.01f, step);
293 for (var t = step; t <= 1f; t += step) {
294 var b_t = Vector3.Lerp(a, b, t);
308 var invRadii = Vector3.one.CompDiv(
radii.Abs()).NaNOrInfTo(0f);
309 if (
radii == Vector2.zero) {
310 shrink = Vector2.zero;
313 shrink = Vector2.one * (
radii * 0.02f).Abs().CompMin();
315 int numRectLines = 8;
316 for (
int i = 0; i < numRectLines; i++) {
317 var shrinkMul = (Vector2.one - shrink.CompMul(invRadii) * i);
318 drawer.
DrawLine(shrinkMul.CompMul(a), shrinkMul.CompMul(b));
319 drawer.
DrawLine(shrinkMul.CompMul(b), shrinkMul.CompMul(c));
320 drawer.
DrawLine(shrinkMul.CompMul(c), shrinkMul.CompMul(d));
321 drawer.
DrawLine(shrinkMul.CompMul(d), shrinkMul.CompMul(a));
void PushMatrix()
Saves the current gizmo matrix to the gizmo matrix stack.
void PopMatrix()
Restores the current gizmo matrix from the gizmo matrix stack.
void DrawLine(Vector3 a, Vector3 b)
Draws a gizmo line that connects the two positions.
Matrix4x4 matrix
Sets or gets the matrix used to transform all gizmos.
UnityEngine.Rect UnityRect
RectLocalCornerEnumerator(Rect rect)
RectLocalCornerEnumerator GetEnumerator()
RectLocalSegmentEnumerator GetEnumerator()
RectLocalSegmentEnumerator(Rect rect)
RectWorldCornerEnumerator(Rect rect)
RectWorldCornerEnumerator GetEnumerator()
RectWorldSegmentEnumerator(Rect rect)
RectWorldSegmentEnumerator GetEnumerator()
Rect(LocalRect localRect, Transform transform)
Rect(Vector2 radii, Transform transform=null)
Rect(Vector3 center, Vector2 radii, Transform transform=null)
bool ContainsProjectedPoint(Vector3 point)
Returns whether the given world-space point projects inside this Rect. Optionally also outputs the ca...
static readonly Vector3 PLANE_NORMAL
void DrawLines(Action< Vector3, Vector3 > drawLineFunc, int divisions=0)
RectWorldSegmentEnumerator segments
Matrix4x4 matrix
Local-to-world matrix for this Rect. (Read only.)
RectWorldCornerEnumerator corners
void DrawRuntimeGizmos(RuntimeGizmoDrawer drawer)
RectLocalCornerEnumerator localCorners
Pose pose
Local-to-world pose for the center of this Rect. (Read only.)
RectLocalSegmentEnumerator localSegments
Matrix4x4? overrideMatrix
Rect(Vector3 center, float radius, Transform transform=null)
static readonly Color DEFAULT_GIZMO_COLOR
bool ContainsProjectedPoint(Vector3 point, out Vector3 point_rect)
Returns whether the given world-space point projects inside this Rect. Optionally also outputs the ca...
A position and rotation. You can multiply two poses; this acts like Matrix4x4 multiplication,...