public virtual void OnOverlayGUI(UnityEngine.Object target, SceneView sceneView) { if (!(target == null)) { Camera camera = (Camera)target; Vector2 mainGameViewTargetSize = GameView.GetMainGameViewTargetSize(); if (mainGameViewTargetSize.x < 0f) { mainGameViewTargetSize.x = sceneView.position.width; mainGameViewTargetSize.y = sceneView.position.height; } Rect rect = camera.rect; mainGameViewTargetSize.x *= Mathf.Max(rect.width, 0f); mainGameViewTargetSize.y *= Mathf.Max(rect.height, 0f); if (mainGameViewTargetSize.x > 0f && mainGameViewTargetSize.y > 0f) { float num = mainGameViewTargetSize.x / mainGameViewTargetSize.y; mainGameViewTargetSize.y = 0.2f * sceneView.position.height; mainGameViewTargetSize.x = mainGameViewTargetSize.y * num; if (mainGameViewTargetSize.y > sceneView.position.height * 0.5f) { mainGameViewTargetSize.y = sceneView.position.height * 0.5f; mainGameViewTargetSize.x = mainGameViewTargetSize.y * num; } if (mainGameViewTargetSize.x > sceneView.position.width * 0.5f) { mainGameViewTargetSize.x = sceneView.position.width * 0.5f; mainGameViewTargetSize.y = mainGameViewTargetSize.x / num; } Rect rect2 = GUILayoutUtility.GetRect(mainGameViewTargetSize.x, mainGameViewTargetSize.y); if (Event.current.type == EventType.Repaint) { this.previewCamera.CopyFrom(camera); Skybox component = this.previewCamera.GetComponent <Skybox>(); if (component) { Skybox component2 = camera.GetComponent <Skybox>(); if (component2 && component2.enabled) { component.enabled = true; component.material = component2.material; } else { component.enabled = false; } } RenderTexture previewTextureWithSize = this.GetPreviewTextureWithSize((int)rect2.width, (int)rect2.height); previewTextureWithSize.antiAliasing = QualitySettings.antiAliasing; this.previewCamera.targetTexture = previewTextureWithSize; this.previewCamera.pixelRect = new Rect(0f, 0f, rect2.width, rect2.height); Handles.EmitGUIGeometryForCamera(camera, this.previewCamera); GL.sRGBWrite = (QualitySettings.activeColorSpace == ColorSpace.Linear); this.previewCamera.Render(); GL.sRGBWrite = false; Graphics.DrawTexture(rect2, previewTextureWithSize, new Rect(0f, 0f, 1f, 1f), 0, 0, 0, 0, GUI.color, EditorGUIUtility.GUITextureBlit2SRGBMaterial); } } } }
public void OnOverlayGUI(UnityEngine.Object target, SceneView sceneView) { if (!(target == null)) { Camera camera = (Camera)target; Vector2 mainGameViewTargetSize = GameView.GetMainGameViewTargetSize(); if (mainGameViewTargetSize.x < 0f) { mainGameViewTargetSize.x = sceneView.position.width; mainGameViewTargetSize.y = sceneView.position.height; } Rect rect = camera.rect; mainGameViewTargetSize.x *= Mathf.Max(rect.width, 0f); mainGameViewTargetSize.y *= Mathf.Max(rect.height, 0f); if (mainGameViewTargetSize.x > 0f && mainGameViewTargetSize.y > 0f) { float num = mainGameViewTargetSize.x / mainGameViewTargetSize.y; mainGameViewTargetSize.y = 0.2f * sceneView.position.height; mainGameViewTargetSize.x = mainGameViewTargetSize.y * num; if (mainGameViewTargetSize.y > sceneView.position.height * 0.5f) { mainGameViewTargetSize.y = sceneView.position.height * 0.5f; mainGameViewTargetSize.x = mainGameViewTargetSize.y * num; } if (mainGameViewTargetSize.x > sceneView.position.width * 0.5f) { mainGameViewTargetSize.x = sceneView.position.width * 0.5f; mainGameViewTargetSize.y = mainGameViewTargetSize.x / num; } Rect rect2 = GUILayoutUtility.GetRect(mainGameViewTargetSize.x, mainGameViewTargetSize.y); rect2 = EditorGUIUtility.PointsToPixels(rect2); rect2.y = (sceneView.position.height + 1f) * EditorGUIUtility.pixelsPerPoint - rect2.y - rect2.height; if (Event.current.type == EventType.Repaint) { this.previewCamera.CopyFrom(camera); Skybox component = this.previewCamera.GetComponent <Skybox>(); if (component) { Skybox component2 = camera.GetComponent <Skybox>(); if (component2 && component2.enabled) { component.enabled = true; component.material = component2.material; } else { component.enabled = false; } } this.previewCamera.targetTexture = null; this.previewCamera.pixelRect = rect2; Handles.EmitGUIGeometryForCamera(camera, this.previewCamera); this.previewCamera.Render(); } } } }
public void OnOverlayGUI(Object target, SceneView sceneView) { if (target != null) { Camera other = (Camera)target; Vector2 sizeOfMainGameView = GameView.GetSizeOfMainGameView(); if (sizeOfMainGameView.x < 0f) { sizeOfMainGameView.x = sceneView.position.width; sizeOfMainGameView.y = sceneView.position.height; } Rect rect = other.rect; sizeOfMainGameView.x *= Mathf.Max(rect.width, 0f); sizeOfMainGameView.y *= Mathf.Max(rect.height, 0f); if ((sizeOfMainGameView.x > 0f) && (sizeOfMainGameView.y > 0f)) { float num = sizeOfMainGameView.x / sizeOfMainGameView.y; sizeOfMainGameView.y = 0.2f * sceneView.position.height; sizeOfMainGameView.x = sizeOfMainGameView.y * num; if (sizeOfMainGameView.y > (sceneView.position.height * 0.5f)) { sizeOfMainGameView.y = sceneView.position.height * 0.5f; sizeOfMainGameView.x = sizeOfMainGameView.y * num; } if (sizeOfMainGameView.x > (sceneView.position.width * 0.5f)) { sizeOfMainGameView.x = sceneView.position.width * 0.5f; sizeOfMainGameView.y = sizeOfMainGameView.x / num; } Rect rect2 = EditorGUIUtility.PointsToPixels(GUILayoutUtility.GetRect(sizeOfMainGameView.x, sizeOfMainGameView.y)); rect2.y = (((sceneView.position.height + 1f) * EditorGUIUtility.pixelsPerPoint) - rect2.y) - rect2.height; if (Event.current.type == EventType.Repaint) { this.previewCamera.CopyFrom(other); Skybox component = this.previewCamera.GetComponent <Skybox>(); if (component != null) { Skybox skybox2 = other.GetComponent <Skybox>(); if ((skybox2 != null) && skybox2.enabled) { component.enabled = true; component.material = skybox2.material; } else { component.enabled = false; } } this.previewCamera.targetTexture = null; this.previewCamera.pixelRect = rect2; Handles.EmitGUIGeometryForCamera(other, this.previewCamera); this.previewCamera.Render(); } } } }
public virtual void OnOverlayGUI(Object target, SceneView sceneView) { if (target == null) { return; } var c = (Camera)target; // Do not render the Camera Preview overlay if the target camera GameObject is not part of the objects the SceneView is rendering if (!sceneView.IsGameObjectInThisSceneView(c.gameObject)) { return; } Vector2 previewSize = c.targetTexture ? new Vector2(c.targetTexture.width, c.targetTexture.height) : PlayModeView.GetMainPlayModeViewTargetSize(); if (previewSize.x < 0f) { // Fallback to Scene View of not a valid game view size previewSize.x = sceneView.position.width; previewSize.y = sceneView.position.height; } // Apply normalizedviewport rect of camera Rect normalizedViewPortRect = c.rect; // clamp normalized rect in [0,1] normalizedViewPortRect.xMin = Math.Max(normalizedViewPortRect.xMin, 0f); normalizedViewPortRect.yMin = Math.Max(normalizedViewPortRect.yMin, 0f); normalizedViewPortRect.xMax = Math.Min(normalizedViewPortRect.xMax, 1f); normalizedViewPortRect.yMax = Math.Min(normalizedViewPortRect.yMax, 1f); previewSize.x *= Mathf.Max(normalizedViewPortRect.width, 0f); previewSize.y *= Mathf.Max(normalizedViewPortRect.height, 0f); // Prevent using invalid previewSize if (previewSize.x < 1f || previewSize.y < 1f) { return; } float aspect = previewSize.x / previewSize.y; // Scale down (fit to scene view) previewSize.y = kPreviewNormalizedSize * sceneView.position.height; previewSize.x = previewSize.y * aspect; if (previewSize.y > sceneView.position.height * 0.5f) { previewSize.y = sceneView.position.height * 0.5f; previewSize.x = previewSize.y * aspect; } if (previewSize.x > sceneView.position.width * 0.5f) { previewSize.x = sceneView.position.width * 0.5f; previewSize.y = previewSize.x / aspect; } // Get and reserve rect Rect cameraRect = GUILayoutUtility.GetRect(previewSize.x, previewSize.y); cameraRect.width = Mathf.Floor(cameraRect.width); if (Event.current.type == EventType.Repaint) { Graphics.DrawTexture(cameraRect, Texture2D.whiteTexture, new Rect(0, 0, 1, 1), 0, 0, 0, 0, Color.black); } var properWidth = cameraRect.height * aspect; cameraRect.x += (cameraRect.width - properWidth) * 0.5f; cameraRect.width = properWidth; if (Event.current.type == EventType.Repaint) { // setup camera and render previewCamera.CopyFrom(c); // make sure the preview camera is rendering the same stage as the SceneView is if (sceneView.overrideSceneCullingMask != 0) { previewCamera.overrideSceneCullingMask = sceneView.overrideSceneCullingMask; } else { previewCamera.scene = sceneView.customScene; } // also make sure to sync any Skybox component on the preview camera var dstSkybox = previewCamera.GetComponent <Skybox>(); if (dstSkybox) { var srcSkybox = c.GetComponent <Skybox>(); if (srcSkybox && srcSkybox.enabled) { dstSkybox.enabled = true; dstSkybox.material = srcSkybox.material; } else { dstSkybox.enabled = false; } } var previewTexture = GetPreviewTextureWithSize((int)cameraRect.width, (int)cameraRect.height); previewTexture.antiAliasing = Mathf.Max(1, QualitySettings.antiAliasing); previewCamera.targetTexture = previewTexture; previewCamera.pixelRect = new Rect(0, 0, cameraRect.width, cameraRect.height); Handles.EmitGUIGeometryForCamera(c, previewCamera); if (c.usePhysicalProperties) { // when sensor size is reduced, the previous frame is still visible behing so we need to clear the texture before rendering. RenderTexture rt = RenderTexture.active; RenderTexture.active = previewTexture; GL.Clear(false, true, Color.clear); RenderTexture.active = rt; } previewCamera.Render(); Graphics.DrawTexture(cameraRect, previewTexture, new Rect(0, 0, 1, 1), 0, 0, 0, 0, GUI.color, EditorGUIUtility.GUITextureBlit2SRGBMaterial); } }
public void OnOverlayGUI(UnityEngine.Object target, SceneView sceneView) { if (target == null) { return; } Camera camera = (Camera)target; Vector2 sizeOfMainGameView = GameView.GetSizeOfMainGameView(); if (sizeOfMainGameView.x < 0f) { sizeOfMainGameView.x = sceneView.position.width; sizeOfMainGameView.y = sceneView.position.height; } Rect rect = camera.rect; sizeOfMainGameView.x *= Mathf.Max(rect.width, 0f); sizeOfMainGameView.y *= Mathf.Max(rect.height, 0f); if (sizeOfMainGameView.x <= 0f || sizeOfMainGameView.y <= 0f) { return; } float num = sizeOfMainGameView.x / sizeOfMainGameView.y; sizeOfMainGameView.y = 0.2f * sceneView.position.height; sizeOfMainGameView.x = sizeOfMainGameView.y * num; if (sizeOfMainGameView.y > sceneView.position.height * 0.5f) { sizeOfMainGameView.y = sceneView.position.height * 0.5f; sizeOfMainGameView.x = sizeOfMainGameView.y * num; } if (sizeOfMainGameView.x > sceneView.position.width * 0.5f) { sizeOfMainGameView.x = sceneView.position.width * 0.5f; sizeOfMainGameView.y = sizeOfMainGameView.x / num; } Rect rect2 = GUILayoutUtility.GetRect(sizeOfMainGameView.x, sizeOfMainGameView.y); rect2.y = sceneView.position.height - rect2.y - rect2.height + 1f; if (Event.current.type == EventType.Repaint) { this.previewCamera.CopyFrom(camera); Skybox component = this.previewCamera.GetComponent <Skybox>(); if (component) { Skybox component2 = camera.GetComponent <Skybox>(); if (component2 && component2.enabled) { component.enabled = true; component.material = component2.material; } else { component.enabled = false; } } this.previewCamera.targetTexture = null; this.previewCamera.pixelRect = rect2; Handles.EmitGUIGeometryForCamera(camera, this.previewCamera); this.previewCamera.Render(); } }
public virtual void OnOverlayGUI(Object target, SceneView sceneView) { if (target == null) { return; } // cache some deep values var c = (Camera)target; Vector2 previewSize = c.targetTexture ? new Vector2(c.targetTexture.width, c.targetTexture.height) : GameView.GetMainGameViewTargetSize(); if (previewSize.x < 0f) { // Fallback to Scene View of not a valid game view size previewSize.x = sceneView.position.width; previewSize.y = sceneView.position.height; } // Apply normalizedviewport rect of camera Rect normalizedViewPortRect = c.rect; previewSize.x *= Mathf.Max(normalizedViewPortRect.width, 0f); previewSize.y *= Mathf.Max(normalizedViewPortRect.height, 0f); // Prevent using invalid previewSize if (previewSize.x < 1f || previewSize.y < 1f) { return; } float aspect = previewSize.x / previewSize.y; // Scale down (fit to scene view) previewSize.y = kPreviewNormalizedSize * sceneView.position.height; previewSize.x = previewSize.y * aspect; if (previewSize.y > sceneView.position.height * 0.5f) { previewSize.y = sceneView.position.height * 0.5f; previewSize.x = previewSize.y * aspect; } if (previewSize.x > sceneView.position.width * 0.5f) { previewSize.x = sceneView.position.width * 0.5f; previewSize.y = previewSize.x / aspect; } // Get and reserve rect Rect cameraRect = GUILayoutUtility.GetRect(previewSize.x, previewSize.y); if (Event.current.type == EventType.Repaint) { // setup camera and render previewCamera.CopyFrom(c); // also make sure to sync any Skybox component on the preview camera var dstSkybox = previewCamera.GetComponent <Skybox>(); if (dstSkybox) { var srcSkybox = c.GetComponent <Skybox>(); if (srcSkybox && srcSkybox.enabled) { dstSkybox.enabled = true; dstSkybox.material = srcSkybox.material; } else { dstSkybox.enabled = false; } } var previewTexture = GetPreviewTextureWithSize((int)cameraRect.width, (int)cameraRect.height); previewTexture.antiAliasing = Mathf.Max(1, QualitySettings.antiAliasing); previewCamera.targetTexture = previewTexture; previewCamera.pixelRect = new Rect(0, 0, cameraRect.width, cameraRect.height); Handles.EmitGUIGeometryForCamera(c, previewCamera); GL.sRGBWrite = QualitySettings.activeColorSpace == ColorSpace.Linear; if (c.usePhysicalProperties) { // when sensor size is reduced, the previous frame is still visible behing so we need to clear the texture before rendering. RenderTexture rt = RenderTexture.active; RenderTexture.active = previewTexture; GL.Clear(false, true, Color.clear); RenderTexture.active = rt; } previewCamera.Render(); GL.sRGBWrite = false; Graphics.DrawTexture(cameraRect, previewTexture, new Rect(0, 0, 1, 1), 0, 0, 0, 0, GUI.color, EditorGUIUtility.GUITextureBlit2SRGBMaterial); } }
public void OnOverlayGUI(UnityEngine.Object target, SceneView sceneView) { if (target == (UnityEngine.Object)null) { return; } Camera camera = (Camera)target; Vector2 sizeOfMainGameView = GameView.GetSizeOfMainGameView(); if ((double)sizeOfMainGameView.x < 0.0) { sizeOfMainGameView.x = sceneView.position.width; sizeOfMainGameView.y = sceneView.position.height; } Rect rect = camera.rect; sizeOfMainGameView.x *= Mathf.Max(rect.width, 0.0f); sizeOfMainGameView.y *= Mathf.Max(rect.height, 0.0f); if ((double)sizeOfMainGameView.x <= 0.0 || (double)sizeOfMainGameView.y <= 0.0) { return; } float num = sizeOfMainGameView.x / sizeOfMainGameView.y; sizeOfMainGameView.y = 0.2f * sceneView.position.height; sizeOfMainGameView.x = sizeOfMainGameView.y * num; if ((double)sizeOfMainGameView.y > (double)sceneView.position.height * 0.5) { sizeOfMainGameView.y = sceneView.position.height * 0.5f; sizeOfMainGameView.x = sizeOfMainGameView.y * num; } if ((double)sizeOfMainGameView.x > (double)sceneView.position.width * 0.5) { sizeOfMainGameView.x = sceneView.position.width * 0.5f; sizeOfMainGameView.y = sizeOfMainGameView.x / num; } Rect pixels = EditorGUIUtility.PointsToPixels(GUILayoutUtility.GetRect(sizeOfMainGameView.x, sizeOfMainGameView.y)); pixels.y = (sceneView.position.height + 1f) * EditorGUIUtility.pixelsPerPoint - pixels.y - pixels.height; if (Event.current.type != EventType.Repaint) { return; } this.previewCamera.CopyFrom(camera); Skybox component1 = this.previewCamera.GetComponent <Skybox>(); if ((bool)((UnityEngine.Object)component1)) { Skybox component2 = camera.GetComponent <Skybox>(); if ((bool)((UnityEngine.Object)component2) && component2.enabled) { component1.enabled = true; component1.material = component2.material; } else { component1.enabled = false; } } this.previewCamera.targetTexture = (RenderTexture)null; this.previewCamera.pixelRect = pixels; Handles.EmitGUIGeometryForCamera(camera, this.previewCamera); this.previewCamera.Render(); }
public override void OnGUI() { UpdateSize(); imguiContainer.style.minWidth = collapsed ? new StyleLength(240) : new StyleLength(StyleKeyword.Auto); imguiContainer.style.minHeight = collapsed ? new StyleLength(135) : new StyleLength(StyleKeyword.Auto); imguiContainer.parent.style.flexGrow = 1; imguiContainer.style.flexGrow = 1; if (selectedCamera == null) { GUILayout.Label("No camera selected", EditorStyles.centeredGreyMiniLabel); return; } if (!CameraEditorUtils.IsViewportRectValidToRender(selectedCamera.rect)) { return; } var sceneView = SceneView.lastActiveSceneView; // Do not render the Camera Preview overlay if the target camera GameObject is not part of the objects the // SceneView is rendering if (!sceneView.IsGameObjectInThisSceneView(selectedCamera.gameObject)) { return; } var cameraRect = imguiContainer.rect; cameraRect.width = Mathf.Floor(cameraRect.width); if (cameraRect.width < 1 || cameraRect.height < 1) { return; } if (Event.current.type == EventType.Repaint) { Graphics.DrawTexture(cameraRect, Texture2D.whiteTexture, new Rect(0, 0, 1, 1), 0, 0, 0, 0, Color.black); // setup camera and render previewCamera.CopyFrom(selectedCamera); // make sure the preview camera is rendering the same stage as the SceneView is if (sceneView.overrideSceneCullingMask != 0) { previewCamera.overrideSceneCullingMask = sceneView.overrideSceneCullingMask; } else { previewCamera.scene = sceneView.customScene; } // also make sure to sync any Skybox component on the preview camera var dstSkybox = previewCamera.GetComponent <Skybox>(); if (dstSkybox) { var srcSkybox = selectedCamera.GetComponent <Skybox>(); if (srcSkybox && srcSkybox.enabled) { dstSkybox.enabled = true; dstSkybox.material = srcSkybox.material; } else { dstSkybox.enabled = false; } } Vector2 previewSize = selectedCamera.targetTexture ? new Vector2(selectedCamera.targetTexture.width, selectedCamera.targetTexture.height) : PlayModeView.GetMainPlayModeViewTargetSize(); if (previewSize.x < 0f) { // Fallback to Scene View of not a valid game view size previewSize.x = sceneView.position.width; previewSize.y = sceneView.position.height; } float rectAspect = cameraRect.width / cameraRect.height; float previewAspect = previewSize.x / previewSize.y; Rect previewRect = cameraRect; if (rectAspect > previewAspect) { float stretch = previewAspect / rectAspect; previewRect = new Rect(cameraRect.xMin + cameraRect.width * (1.0f - stretch) * .5f, cameraRect.yMin, stretch * cameraRect.width, cameraRect.height); } else { float stretch = rectAspect / previewAspect; previewRect = new Rect(cameraRect.xMin, cameraRect.yMin + cameraRect.height * (1.0f - stretch) * .5f, cameraRect.width, stretch * cameraRect.height); } var previewTexture = GetPreviewTextureWithSizeAndAA((int)previewRect.width, (int)previewRect.height); previewCamera.targetTexture = previewTexture; previewCamera.pixelRect = new Rect(0, 0, previewRect.width, previewRect.height); Handles.EmitGUIGeometryForCamera(selectedCamera, previewCamera); if (selectedCamera.usePhysicalProperties) { // when sensor size is reduced, the previous frame is still visible behing so we need to clear the texture before rendering. RenderTexture rt = RenderTexture.active; RenderTexture.active = previewTexture; GL.Clear(false, true, Color.clear); RenderTexture.active = rt; } previewCamera.Render(); Graphics.DrawTexture(previewRect, previewTexture, new Rect(0, 0, 1, 1), 0, 0, 0, 0, GUI.color, EditorGUIUtility.GUITextureBlit2SRGBMaterial); } }