public virtual void DrawSphere(float radius, Matrix4x4 matrix)
        {
            Matrix4x4 lookMatrix = Matrix4x4.identity;

#if UNITY_EDITOR
            UnityEditor.SceneView sceneView = UnityEditor.SceneView.currentDrawingSceneView;
            if (sceneView != null)
            {
                Camera cam         = sceneView.camera;
                var    cameraTrans = cam.transform;
                var    rotation    = Quaternion.LookRotation(cameraTrans.position - matrix.MultiplyPoint(Vector3.zero));
                lookMatrix = Matrix4x4.TRS(matrix.MultiplyPoint(Vector3.zero), rotation, matrix.lossyScale);
                DrawCircle(radius, lookMatrix);
            }
#endif

            //绘制边界
            bool oldFillColor = fillPolygon;
            fillPolygon = false;
            PushColor(outlineColor);
            DrawCircle(radius, matrix);
            DrawCircle(radius, matrix * Matrix4x4.Rotate(Quaternion.Euler(0, 90, 0)));
            DrawCircle(radius, matrix * Matrix4x4.Rotate(Quaternion.Euler(90, 0, 0)));
            PopColor();
            fillPolygon = oldFillColor;
        }
Beispiel #2
0
        public static T SafeGetComponent <T>(GameObject go) where T : Component
        {
            T component = go.GetComponent <T>();

            if (component == null)
            {
                string err = string.Format("Unable to GetComponent of type \"{0}\" on GameObject \"{1}\"", typeof(T), go.name);
                Debug.LogError(err);

#if UNITY_EDITOR
                if (UnityEditor.SceneView.sceneViews.Count > 0)
                {
                    UnityEditor.SceneView sv = UnityEditor.SceneView.sceneViews[0] as UnityEditor.SceneView;

                    if (sv != null)
                    {
                        UnityEditor.EditorApplication.isPaused = true;
                        UnityEditor.Selection.activeGameObject = go;
                        sv.FrameSelected();
                    }
                }
#endif
                throw new UnityException(err);
            }

            return(component);
        }
        private void OnSceneGUI(UnityEditor.SceneView sceneview)
        {
            m_mousePosition = Event.current.mousePosition;
            switch (Event.current.type)
            {
            case EventType.MouseDown:
                m_MouseClickPosition = m_mousePosition;
                break;

            case EventType.KeyDown:
                switch (Event.current.keyCode)
                {
                case KeyCode.PageUp:
                    ++m_DebugStep;
                    sceneview.Repaint();
                    break;

                case KeyCode.PageDown:
                    m_DebugStep = Mathf.Max(0, m_DebugStep - 1);
                    sceneview.Repaint();
                    break;

                case KeyCode.End:
                    // Usefull we you don't want to change the scene viewport but still update the mouse click position
                    m_MouseClickPosition = m_mousePosition;
                    sceneview.Repaint();
                    break;
                }
                break;
            }
        }
Beispiel #4
0
 /// <summary>
 /// 用于在Scene窗口Renderer
 /// </summary>
 protected void OnSceneGUI(UnityEditor.SceneView sceneView)
 {
     if (MyRendererIn == RendererIn.Scene)
     {
         DoUpdate(sceneView.camera);
     }
 }
Beispiel #5
0
		/// <summary>
		/// <para>Seguimiento de la vista al objetivo</para>
		/// </summary>
		private void Follow()// Seguimiento de la vista al objetivo
		{
			// Selecciona la sceneview actual
			sceneViews = UnityEditor.SceneView.sceneViews;

			// Si no se cumplen las condiciones optimas, return
			if (svSeguidor == null || !on || sceneViews.Count == 0) return;

			// Recorremos todas
			foreach (SceneViewSeguidor svs in svSeguidor)
			{
				// Si no esta activado continuamos
				if (svs.activado == false) continue;

				// Fijamos la sceneview
				UnityEditor.SceneView sceneView = (UnityEditor.SceneView)sceneViews[svs.sceneViewIndex];

				if (sceneView != null)
				{
					if ((Application.isPlaying && soloEnPlayMode) || !soloEnPlayMode)
					{
						// Seguimos
						sceneView.orthographic = svs.ortographic;
						sceneView.LookAtDirect(svs.objetivo.position + svs.posicionOffset, (svs.activarFixedRotacion) ? Quaternion.Euler(svs.fixedRotacion) : svs.objetivo.rotation, svs.distancia);
					}
				}
			}
		}
Beispiel #6
0
        private void DuringSceneGui(UnityEditor.SceneView sceneView)
        {
            Event currentGUIEvent = Event.current;

            Vector3 mousePos       = currentGUIEvent.mousePosition;
            float   pixelsPerPoint = UnityEditor.EditorGUIUtility.pixelsPerPoint;

            mousePos.y  = sceneView.camera.pixelHeight - mousePos.y * pixelsPerPoint;
            mousePos.x *= pixelsPerPoint;

            Ray ray = sceneView.camera.ScreenPointToRay(mousePos);

            if (Physics.Raycast(ray, out RaycastHit hit))
            {
                clickHelper.UpdateTargeting(hit.point);
            }

            switch (currentGUIEvent.type)
            {
            case EventType.MouseMove:
                UnityEditor.HandleUtility.Repaint();
                break;

            case EventType.MouseDown:
                if (currentGUIEvent.button == 0)                         // Wait for Left mouse button down
                {
                    clickHelper.EndTargeting();
                    UnityEditor.SceneView.duringSceneGui -= DuringSceneGui;
                    currentGUIEvent
                    .Use();                                     // This consumes the event, so that other controls/buttons won't be able to use it
                }
                break;
            }
        }
Beispiel #7
0
        public static void MarkInScene(Vector3 worldPos, float pixel, float rad)
        {
#if UNITY_EDITOR
            UnityEditor.SceneView scene = UnityEditor.SceneView.currentDrawingSceneView;
            if (!scene || !scene.camera)
            {
                return;
            }
            Matrix4x4 defM = Gizmos.matrix;
            Gizmos.matrix = scene.camera.cameraToWorldMatrix;

            Vector3 p        = scene.camera.worldToCameraMatrix.MultiplyPoint(worldPos);
            Vector3 sp       = scene.camera.WorldToScreenPoint(worldPos);
            Vector3 sp2      = scene.camera.WorldToScreenPoint(Gizmos.matrix.MultiplyPoint(p + Vector3.right));
            float   pixScale = 1f / Vector3.Distance(sp, sp2);

            Vector3 p1;
            Vector2 off = new Vector2(Mathf.Sin(rad), Mathf.Cos(rad));
            off *= pixel * pixScale;
            p1.x = p.x + off.x;
            p1.y = p.y + off.y;
            p1.z = p.z;
            Vector3 p2 = p1;
            p2.x = p.x * 2f - p1.x;
            p2.y = p.y * 2f - p1.y;
            Gizmos.DrawLine(p1, p2);
            p1.x = p.x + off.y;
            p1.y = p.y - off.x;
            p2.x = p.x * 2f - p1.x;
            p2.y = p.y * 2f - p1.y;
            Gizmos.DrawLine(p1, p2);
            Gizmos.matrix = defM;
#endif
        }
Beispiel #8
0
        private void OnSceneGUIDelegate(UnityEditor.SceneView sceneView)
        {
            //Debug.Log(Time.renderedFrameCount);
            if (!_existenceHook())
            {
                UnityEditor.SceneView.onSceneGUIDelegate -= OnSceneGUIDelegate;
                Dispose();
                return;
            }

            if (_lastFrame >= Time.renderedFrameCount)
            {
                return;
            }

            _lastFrame = Time.renderedFrameCount;
            var position = _position();
            var rotation = _rotation();

            var dSize = _dataSize();

            dSize = new Vector3(Mathf.Max(dSize.x, float.Epsilon), Mathf.Max(dSize.y, float.Epsilon), Mathf.Max(dSize.z, float.Epsilon));
            var displaySize = _displaySize();

            var displaySizeScale = new Vector3(displaySize.x / dSize.x, displaySize.y / dSize.y, displaySize.z / dSize.z);
            var scale            = _scale();

            scale = new Vector3(scale.x * displaySizeScale.x, scale.y * displaySizeScale.y, scale.z * displaySizeScale.z);

            var mat = Matrix4x4.TRS(position, rotation, scale);

            Graphics.DrawMesh(_mesh, mat, _material, 0);
        }
Beispiel #9
0
        private static bool ShouldDrawGizmos(ProbeVolume probeVolume)
        {
            if (ShaderConfig.s_ProbeVolumesEvaluationMode == ProbeVolumesEvaluationModes.Disabled)
            {
                return(false);
            }

            UnityEditor.SceneView sceneView = UnityEditor.SceneView.currentDrawingSceneView;

            if (sceneView == null)
            {
                sceneView = UnityEditor.SceneView.lastActiveSceneView;
            }

            if (sceneView != null && !sceneView.drawGizmos)
            {
                return(false);
            }

            if (!probeVolume.enabled)
            {
                return(false);
            }

            return(probeVolume.parameters.drawProbes);
        }
Beispiel #10
0
 public static Vector2 GetMousePosition()
 {
     if (IsEditor())
     {
                         #if UNITY_EDITOR
         UnityEditor.SceneView sceneview = UnityEditor.SceneView.lastActiveSceneView;
         if (sceneview == null || sceneview.camera == null || Event.current == null)
         {
             return(Vector2.zero);
         }
         Vector2 mousePos = Event.current.mousePosition;
         mousePos = new Vector2(mousePos.x / sceneview.camera.pixelWidth, mousePos.y / sceneview.camera.pixelHeight);
                         #if UNITY_5_4_OR_NEWER
         mousePos *= UnityEditor.EditorGUIUtility.pixelsPerPoint;
                         #endif
         mousePos.y = 1 - mousePos.y;
         return(mousePos);
                         #else
         return(Input.mousePosition);
                         #endif
     }
     else
     {
         return(Input.mousePosition);
     }
 }
Beispiel #11
0
        /// <summary>
        /// Update the scene view matrix for shader.
        /// </summary>
        static void UpdateSceneViewMatrixForShader()
        {
            UnityEditor.SceneView sceneView = UnityEditor.SceneView.lastActiveSceneView;
            if (!sceneView || !sceneView.camera)
            {
                return;
            }

            Camera    cam = sceneView.camera;
            Matrix4x4 w2c = cam.worldToCameraMatrix;
            Matrix4x4 prj = cam.projectionMatrix;

            foreach (var sm in s_ActiveSoftMaskables)
            {
                if (sm)
                {
                    Material mat = sm._maskMaterial;
                    if (mat)
                    {
                        mat.SetMatrix("_SceneView", w2c);
                        mat.SetMatrix("_SceneProj", prj);
                    }
                }
            }
        }
        //[UnityEditor.DrawGizmo(UnityEditor.GizmoType.NonSelected | UnityEditor.GizmoType.Active)]
        static public void Draw(UnityEditor.SceneView sceneView)                  //(Transform objectTransform, UnityEditor.GizmoType gizmoType)
        {
            foreach (var kvp in allGizmos)
            {
                GizmoGroup group = kvp.Value;

                if (!group.enabled)
                {
                    continue;
                }

                if (group.colorOverride)
                {
                    UnityEditor.Handles.color = group.color;
                }

                for (int i = 0; i < group.gizmos.Count; i++)
                {
                    if (!group.colorOverride)
                    {
                        UnityEditor.Handles.color = group.gizmos[i].Color;
                    }

                    group.gizmos[i].Draw();
                }
            }

            //allGizmos.Clear();
            //will show gizmos only the frame they were assigned
        }
        public bool IsEditorSceneViewFocused()
        {
#if UNITY_EDITOR
            ArrayList sceneViews = UnityEditor.SceneView.sceneViews;
            if (sceneViews == null)
            {
                return(false);
            }
            string focusedWindowTitle = GetFocusedEditorWindowTitle();
            for (int i = 0; i < sceneViews.Count; i++)
            {
                UnityEditor.SceneView sceneView = sceneViews[i] as UnityEditor.SceneView;
                if (sceneView == null)
                {
                    continue;
                }
#if UNITY_2017_PLUS
                if (sceneView.titleContent.text == focusedWindowTitle)
                {
                    return(true);
                }
#else
                if (sceneView.title == focusedWindowTitle)
                {
                    return(true);
                }
#endif
            }
            return(false);
#else
            return(false);
#endif
        }
Beispiel #14
0
 private void OnSceneGUI(UnityEditor.SceneView sceneView)
 {
     if (parent is PositionDrawer)
     {
         DrawInfiniteAxisLine();
     }
 }
Beispiel #15
0
        void Follow()
        {
            sceneViews = UnityEditor.SceneView.sceneViews;
            if (sceneViewFollowers == null || !on || sceneViews.Count == 0)
            {
                return;
            }

            foreach (SceneViewFollower svf in sceneViewFollowers)
            {
                if (!svf.enable)
                {
                    continue;
                }
                UnityEditor.SceneView sceneView = (UnityEditor.SceneView)sceneViews[svf.sceneViewIndex];
                if (sceneView != null)
                {
                    if ((Application.isPlaying && onlyInPlayMode) || !onlyInPlayMode)
                    {
                        sceneView.orthographic = svf.orthographic;
                        sceneView.LookAtDirect(svf.targetTransform.position + svf.positionOffset, (svf.enableFixedRotation) ? Quaternion.Euler(svf.fixedRotation) : svf.targetTransform.rotation, svf.size);
                    }
                }
            }
        }
 public static void DoViewTool(UnityEditor.SceneView view)
 {
     if (__DoViewTool_0_1 == null)
     {
         __DoViewTool_0_1 = (Action <UnityEditor.SceneView>)Delegate.CreateDelegate(typeof(Action <UnityEditor.SceneView>), null, UnityTypes.UnityEditor_SceneViewMotion.GetMethod("DoViewTool", R.StaticMembers, null, new Type[] { typeof(UnityEditor.SceneView) }, null));
     }
     __DoViewTool_0_1(view);
 }
Beispiel #17
0
 public override void BeforeSceneDraw(UnityEditor.SceneView current)
 {
     base.BeforeSceneDraw(current);
     if (Event.current.type == EventType.MouseUp)
     {
         GetRotation();
     }
 }
Beispiel #18
0
        /// <summary>
        /// Called on scene view
        /// </summary>
        private void OnSceneView(UnityEditor.SceneView sView)
        {
            if (Application.isPlaying)
            {
                return;
            }

            threadUpdate();
        }
Beispiel #19
0
 public void OnRepaint(UnityEditor.SceneView sceneView, Event e)
 {
     // Selected brush green outline
     if (!isBrushConvex)
     {
         SabreCSGResources.GetSelectedBrushMaterial().SetPass(0);
         DrawPolygons(Color.red, polygons);
     }
 }
Beispiel #20
0
        public static float FactorFromSceneViewPixel(Transform trans, Vector3 localPos = new Vector3())
        {
#if UNITY_EDITOR
            UnityEditor.SceneView scene = UnityEditor.SceneView.currentDrawingSceneView;
            if (scene)
                return FactorFromPixel(scene.camera, trans, localPos);
            else
                return 0f;
#else
        return 0f;
#endif
        }
Beispiel #21
0
        private static bool IsValidCamera(Camera cam)
        {
#if UNITY_EDITOR
            UnityEditor.SceneView sView = UnityEditor.SceneView.currentDrawingSceneView;
            if (sView && sView.camera == cam)
            {
                return(true);
            }
#endif

            return(cam.enabled);
        }
Beispiel #22
0
        public static Camera GetSceneViewCamera()
        {
#if UNITY_EDITOR
            UnityEditor.SceneView scene = UnityEditor.SceneView.currentDrawingSceneView;
            if (scene)
                return scene.camera;
            else
                return null;
#else
            return null;
#endif
        }
        public static void Focus()
        {
#if UNITY_EDITOR
            UnityEditor.SceneView sv = UnityEditor.SceneView.sceneViews[0] as UnityEditor.SceneView;
            sv.in2DMode     = true;
            sv.orthographic = true;
            UnityEditor.EditorGUIUtility.PingObject(CScapeToolsetManager.tiles[activeTile]);
            var currentlActive = UnityEditor.Selection.activeGameObject;
            UnityEditor.Selection.activeGameObject = tiles[activeTile].gameObject;
            UnityEditor.SceneView.lastActiveSceneView.FrameSelected();
            UnityEditor.Selection.activeGameObject = currentlActive;
#endif
        }
        /// <summary>
        /// Removes the command buffer used for rendering.
        /// </summary>
        public void ClearCommandBuffer()
        {
            if (renderingCaller != null && renderingCaller.mainCamera != null)
            {
                renderingCaller.mainCamera.RemoveCommandBuffer(_cameraEvent, commandBuffer);
            }
#if UNITY_EDITOR
            UnityEditor.SceneView sceneView = UnityEditor.SceneView.lastActiveSceneView;
            if (sceneView != null && sceneView.camera != null)
            {
                sceneView.camera.RemoveCommandBuffer(_cameraEvent, commandBuffer);
            }
#endif //UNITY_EDITOR
        }
Beispiel #25
0
        public static float FactorToSceneViewPixel(Transform trans, Vector3 localPos = new Vector3())
        {
#if UNITY_EDITOR
            UnityEditor.SceneView scene = UnityEditor.SceneView.currentDrawingSceneView;
            if (scene)
            {
                return(FactorToPixel(scene.camera, trans, localPos));
            }
            else
            {
                return(0f);
            }
#else
            return(0f);
#endif
        }
    private void AddCommandBuffer(UnityEngine.Rendering.CameraEvent cameraEvent)
    {
        this.usedCameraEvent = cameraEvent;
        this.cameraEventHandler.CameraComponent.AddCommandBuffer(this.usedCameraEvent, this.commandBuffer);

#if UNITY_EDITOR
        if (this.drawInScene)
        {
            int sceneViewCount = UnityEditor.SceneView.sceneViews.Count;
            for (int i = 0; i < sceneViewCount; ++i)
            {
                UnityEditor.SceneView sceneView = UnityEditor.SceneView.sceneViews[i] as UnityEditor.SceneView;
                sceneView.camera.AddCommandBuffer(this.usedCameraEvent, this.commandBuffer);
            }
        }
#endif
    }
Beispiel #27
0
        void ongui(UnityEditor.SceneView sv)
        {
            if (!DrawHandles)
            {
                return;
            }
            var target = this;

            UnityEditor.Handles.color = target.color;
            UnityEditor.Handles.zTest = UnityEngine.Rendering.CompareFunction.Disabled;
            UnityEditor.Handles.SphereHandleCap(0, target.transform.position, target.transform.rotation, target.HandlesSizes, EventType.Repaint);
            UnityEditor.Handles.ArrowHandleCap(0, target.transform.position, target.transform.rotation, target.HandlesSizes * 2.5f, EventType.Repaint);

            UnityEditor.Handles.ArrowHandleCap(0, target.transform.position + target.HandlesSizes * target.transform.right, target.transform.rotation, target.HandlesSizes * 1.5f, EventType.Repaint);
            UnityEditor.Handles.ArrowHandleCap(0, target.transform.position + target.HandlesSizes * (Quaternion.AngleAxis(120, target.transform.forward) * target.transform.right), target.transform.rotation, target.HandlesSizes * 1.5f, EventType.Repaint);
            UnityEditor.Handles.ArrowHandleCap(0, target.transform.position + target.HandlesSizes * (Quaternion.AngleAxis(240, target.transform.forward) * target.transform.right), target.transform.rotation, target.HandlesSizes * 1.5f, EventType.Repaint);
        }
        /// <summary>
        /// Initializes the command buffer used for rendering.
        /// </summary>
        /// <param name="cameraEvent"></param> The camera event on which the command buffer is to be executed.
        public void InitializeCommandBuffer(CameraEvent cameraEvent)
        {
            commandBuffer      = new CommandBuffer();
            commandBuffer.name = gameObject.name + " - Execute rendering";
            _cameraEvent       = cameraEvent;
            if (renderingCaller != null && renderingCaller.mainCamera != null)
            {
                renderingCaller.mainCamera.AddCommandBuffer(_cameraEvent, commandBuffer);
            }
#if UNITY_EDITOR
            UnityEditor.SceneView sceneView = UnityEditor.SceneView.lastActiveSceneView;
            if (sceneView != null && sceneView.camera != null)
            {
                sceneView.camera.AddCommandBuffer(_cameraEvent, commandBuffer);
            }
#endif //UNITY_EDITOR
        }
Beispiel #29
0
//----------------------------------------------------------------------------------------------------------------------

        //Make the specified camera (or Camera.main) follow the first SceneView camera
        void Follow()
        {
            ArrayList sceneViews = UnityEditor.SceneView.sceneViews;

            if (sceneViews.Count == 0)
            {
                return;
            }


            Camera gameCamera = (null != m_gameViewCamera) ? m_gameViewCamera : Camera.main;

            if (null == gameCamera)
            {
                return;
            }

            Transform gameCameraT = gameCamera.transform;

            if (sceneViews.Count <= 0)
            {
                return;
            }

            UnityEditor.SceneView sceneView = (UnityEditor.SceneView)sceneViews[0];
            if (null == sceneView)
            {
                return;
            }

            Camera curSceneCam = sceneView.camera;

            if (null == curSceneCam)
            {
                return;
            }

            Transform curSceneCamT = curSceneCam.transform;

            gameCamera.orthographic = sceneView.orthographic;
            gameCameraT.position    = curSceneCamT.position;
            gameCameraT.rotation    = curSceneCamT.rotation;
        }
Beispiel #30
0
        private static bool ShouldDrawGizmos(ProbeVolume probeVolume)
        {
            UnityEditor.SceneView sceneView = UnityEditor.SceneView.currentDrawingSceneView;

            if (sceneView == null)
            {
                sceneView = UnityEditor.SceneView.lastActiveSceneView;
            }

            if (sceneView != null && !sceneView.drawGizmos)
            {
                return(false);
            }

            if (!probeVolume.enabled)
            {
                return(false);
            }

            return(probeVolume.parameters.drawProbes);
        }