Skip to content

Commit 6821c60

Browse files
authored
Add projector gizmo (#71)
1 parent 9b171b6 commit 6821c60

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

‎RuntimeUnityEditor/Features/Gizmos/GizmoDrawer.cs‎

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ public void UpdateState(Transform rootTransform)
7272
_drawList.Add(new KeyValuePair<Action<Component>, Component>(DrawTransformGizmo, component));
7373
else if (component is Collider)
7474
_drawList.Add(new KeyValuePair<Action<Component>, Component>(DrawColliderGizmo, component));
75+
else if (component is Projector)
76+
_drawList.Add(new KeyValuePair<Action<Component>, Component>(DrawProjectorGizmo, component));
7577
else if (_dbcType != null && component.GetType() == _dbcType)
7678
_drawList.Add(new KeyValuePair<Action<Component>, Component>(DrawDynamicBoneColliderGizmo, component));
7779

@@ -190,6 +192,57 @@ private static void DrawDynamicBoneColliderGizmo(Component obj)
190192
DrawWireCapsule(transform.TransformPoint(center), transform.TransformPoint(center2), radius, color);
191193
}
192194

195+
private static void DrawProjectorGizmo(Component obj)
196+
{
197+
if (obj != null && obj is Projector projector)
198+
{
199+
float startRange, endRange;
200+
if (projector.orthographic)
201+
{
202+
startRange = projector.orthographicSize;
203+
endRange = projector.orthographicSize;
204+
}
205+
else
206+
{
207+
startRange = projector.nearClipPlane * Mathf.Tan(Mathf.PI / 180f * projector.fieldOfView / 2f);
208+
endRange = projector.farClipPlane * Mathf.Tan(Mathf.PI / 180f * projector.fieldOfView / 2f);
209+
}
210+
211+
Vector3 forward = projector.transform.rotation * Vector3.forward;
212+
Vector3 up = projector.transform.rotation * Vector3.up;
213+
Vector3 right = projector.transform.rotation * Vector3.right;
214+
215+
Vector3 startTopRight, startBottomRight, startTopLeft, startBottomLeft, endTopRight, endBottomRight, endTopLeft, endBottomLeft;
216+
startTopRight = projector.transform.position + forward * projector.nearClipPlane + (up + right * projector.aspectRatio) * startRange;
217+
startBottomRight = projector.transform.position + forward * projector.nearClipPlane + (-up + right * projector.aspectRatio) * startRange;
218+
startTopLeft = projector.transform.position + forward * projector.nearClipPlane + (up - right * projector.aspectRatio) * startRange;
219+
startBottomLeft = projector.transform.position + forward * projector.nearClipPlane + (-up - right * projector.aspectRatio) * startRange;
220+
221+
endTopRight = projector.transform.position + forward * projector.farClipPlane + (up + right * projector.aspectRatio) * endRange;
222+
endBottomRight = projector.transform.position + forward * projector.farClipPlane + (-up + right * projector.aspectRatio) * endRange;
223+
endTopLeft = projector.transform.position + forward * projector.farClipPlane + (up - right * projector.aspectRatio) * endRange;
224+
endBottomLeft = projector.transform.position + forward * projector.farClipPlane + (-up - right * projector.aspectRatio) * endRange;
225+
226+
//Draw near clip plane
227+
lib.Gizmos.Line(startTopRight, startBottomRight, Color.red);
228+
lib.Gizmos.Line(startBottomRight, startBottomLeft, Color.red);
229+
lib.Gizmos.Line(startBottomLeft, startTopLeft, Color.red);
230+
lib.Gizmos.Line(startTopLeft, startTopRight, Color.red);
231+
232+
//Draw far clip plane
233+
lib.Gizmos.Line(endTopRight, endBottomRight, Color.red);
234+
lib.Gizmos.Line(endBottomRight, endBottomLeft, Color.red);
235+
lib.Gizmos.Line(endBottomLeft, endTopLeft, Color.red);
236+
lib.Gizmos.Line(endTopLeft, endTopRight, Color.red);
237+
238+
//Draw connection between near and far clip planes
239+
lib.Gizmos.Line(startTopRight, endTopRight, Color.red);
240+
lib.Gizmos.Line(startBottomRight, endBottomRight, Color.red);
241+
lib.Gizmos.Line(startTopLeft, endTopLeft, Color.red);
242+
lib.Gizmos.Line(startBottomLeft, endBottomLeft, Color.red);
243+
}
244+
}
245+
193246
// Based on code by Qriva
194247
private static void DrawWireCapsule(Vector3 p1, Vector3 p2, float radius, Color color)
195248
{

0 commit comments

Comments
 (0)