/// <summary>
    /// Raycast from mouse Position in scene view for future mouseClick object
    /// </summary>
    public static HitSceneView SetCurrentOverObject(HitSceneView newHit, bool setNullIfNot = true)
    {
        RaycastHit _saveRaycastHit;
        Ray        worldRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);

        //first a test only for point
        //if (Physics.Raycast(worldRay, out saveRaycastHit, Mathf.Infinity, 1 << LayerMask.NameToLayer(gravityAttractorEditor.layerPoint), QueryTriggerInteraction.Ignore))
        if (Physics.Raycast(worldRay, out _saveRaycastHit, Mathf.Infinity))
        {
            if (_saveRaycastHit.collider.gameObject != null)
            {
                newHit.objHit   = _saveRaycastHit.collider.gameObject;
                newHit.pointHit = _saveRaycastHit.point;
                newHit.normal   = _saveRaycastHit.normal;
            }
        }
        else
        {
            if (setNullIfNot)
            {
                newHit.objHit   = null;
                newHit.pointHit = ExtVector3.GetNullVector();
            }
        }
        return(newHit);
    }
 public void Copy(HitSceneView other)
 {
     Target   = other.Target;
     PointHit = other.PointHit;
     Normal   = other.Normal;
     Ray      = other.Ray;
     Hit      = other.Hit;
     Hit2d    = other.Hit2d;
 }
        /// <summary>
        /// Raycast from mouse Position in scene view and save object hit
        /// </summary>
        /// <param name="newHit">return the info of the hit</param>
        /// <param name="setNullIfNot">if true, set back the last hitObject to null</param>
        public static HitSceneView SetCurrentOverObject(HitSceneView newHit, bool setNullIfNot = true)
        {
            if (Event.current == null)
            {
                return(newHit);
            }
            Vector2 mousePos = Event.current.mousePosition;

            if (mousePos.x < 0 || mousePos.x >= Screen.width || mousePos.y < 0 || mousePos.y >= Screen.height)
            {
                return(newHit);
            }

            RaycastHit _saveRaycastHit;
            Ray        worldRay = HandleUtility.GUIPointToWorldRay(mousePos);

            newHit.Ray = worldRay;
            //first a test only for point
            if (Physics.Raycast(worldRay, out _saveRaycastHit, Mathf.Infinity))
            {
                if (_saveRaycastHit.collider.gameObject != null)
                {
                    newHit.objHit   = _saveRaycastHit.collider.gameObject;
                    newHit.pointHit = _saveRaycastHit.point;
                    newHit.normal   = _saveRaycastHit.normal;
                    newHit.Hit      = _saveRaycastHit;
                }
            }
            else
            {
                RaycastHit2D raycast2d = Physics2D.Raycast(worldRay.GetPoint(0), worldRay.direction);
                if (raycast2d.collider != null)
                {
                    newHit.objHit   = raycast2d.collider.gameObject;
                    newHit.pointHit = raycast2d.point;
                    newHit.normal   = raycast2d.normal;
                    newHit.Hit2d    = raycast2d;
                }
                else
                {
                    if (setNullIfNot)
                    {
                        newHit.objHit   = null;
                        newHit.pointHit = Vector3.zero;
                    }
                }
            }
            return(newHit);
        }