diff options
Diffstat (limited to 'Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/GraphicRaycaster.cs')
| -rw-r--r-- | Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/GraphicRaycaster.cs | 288 | 
1 files changed, 0 insertions, 288 deletions
| diff --git a/Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/GraphicRaycaster.cs b/Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/GraphicRaycaster.cs deleted file mode 100644 index 2582204..0000000 --- a/Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/GraphicRaycaster.cs +++ /dev/null @@ -1,288 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using UnityEngine.EventSystems; -using UnityEngine.Serialization; - -namespace UnityEngine.UI -{ -    [AddComponentMenu("Event/Graphic Raycaster")] -    [RequireComponent(typeof(Canvas))] -    public class GraphicRaycaster : BaseRaycaster -    { -        protected const int kNoEventMaskSet = -1; -        public enum BlockingObjects -        { -            None = 0, -            TwoD = 1, -            ThreeD = 2, -            All = 3, -        } - -        public override int sortOrderPriority -        { -            get -            { -                // We need to return the sorting order here as distance will all be 0 for overlay. -                if (canvas.renderMode == RenderMode.ScreenSpaceOverlay) -                    return canvas.sortingOrder; - -                return base.sortOrderPriority; -            } -        } - -        public override int renderOrderPriority -        { -            get -            { -                // We need to return the sorting order here as distance will all be 0 for overlay. -                if (canvas.renderMode == RenderMode.ScreenSpaceOverlay) -                    return canvas.rootCanvas.renderOrder; - -                return base.renderOrderPriority; -            } -        } - -        [FormerlySerializedAs("ignoreReversedGraphics")] -        [SerializeField] -        private bool m_IgnoreReversedGraphics = true; -        [FormerlySerializedAs("blockingObjects")] -        [SerializeField] -        private BlockingObjects m_BlockingObjects = BlockingObjects.None; - -        public bool ignoreReversedGraphics { get {return m_IgnoreReversedGraphics; } set { m_IgnoreReversedGraphics = value; } } -        public BlockingObjects blockingObjects { get {return m_BlockingObjects; } set { m_BlockingObjects = value; } } - -        [SerializeField] -        protected LayerMask m_BlockingMask = kNoEventMaskSet; - -        private Canvas m_Canvas; - -        protected GraphicRaycaster() -        {} - -        private Canvas canvas -        { -            get -            { -                if (m_Canvas != null) -                    return m_Canvas; - -                m_Canvas = GetComponent<Canvas>(); -                return m_Canvas; -            } -        } - -        [NonSerialized] private List<Graphic> m_RaycastResults = new List<Graphic>(); -        public override void Raycast(PointerEventData eventData, List<RaycastResult> resultAppendList) -        { -            if (canvas == null) -                return; - -            // 拿到canvas下的所有graphic -            var canvasGraphics = GraphicRegistry.GetGraphicsForCanvas(canvas); -            if (canvasGraphics == null || canvasGraphics.Count == 0) -                return; - -            int displayIndex; -            var currentEventCamera = eventCamera; // Propery can call Camera.main, so cache the reference - -            if (canvas.renderMode == RenderMode.ScreenSpaceOverlay || currentEventCamera == null) -                displayIndex = canvas.targetDisplay; -            else -                displayIndex = currentEventCamera.targetDisplay; - -            var eventPosition = Display.RelativeMouseAt(eventData.position); -            if (eventPosition != Vector3.zero) -            { -                // We support multiple display and display identification based on event position. - -                int eventDisplayIndex = (int)eventPosition.z; - -                // Discard events that are not part of this display so the user does not interact with multiple displays at once. -                if (eventDisplayIndex != displayIndex) -                    return; -            } -            else -            { -                // The multiple display system is not supported on all platforms, when it is not supported the returned position -                // will be all zeros so when the returned index is 0 we will default to the event data to be safe. -                eventPosition = eventData.position; - -                // We dont really know in which display the event occured. We will process the event assuming it occured in our display. -            } - -            // Convert to view space -            Vector2 pos; -            if (currentEventCamera == null) -            { -                // Multiple display support only when not the main display. For display 0 the reported -                // resolution is always the desktops resolution since its part of the display API, -                // so we use the standard none multiple display method. (case 741751) -                float w = Screen.width; -                float h = Screen.height; -                if (displayIndex > 0 && displayIndex < Display.displays.Length) -                { -                    w = Display.displays[displayIndex].systemWidth; -                    h = Display.displays[displayIndex].systemHeight; -                } -                pos = new Vector2(eventPosition.x / w, eventPosition.y / h); -            } -            else -                pos = currentEventCamera.ScreenToViewportPoint(eventPosition); - -            // If it's outside the camera's viewport, do nothing -            if (pos.x < 0f || pos.x > 1f || pos.y < 0f || pos.y > 1f) -                return; - -            float hitDistance = float.MaxValue; - -            Ray ray = new Ray(); - -            if (currentEventCamera != null) -                ray = currentEventCamera.ScreenPointToRay(eventPosition); - -            if (canvas.renderMode != RenderMode.ScreenSpaceOverlay && blockingObjects != BlockingObjects.None) -            { -                float distanceToClipPlane = 100.0f; - -                if (currentEventCamera != null) -                { -                    float projectionDirection = ray.direction.z; -                    distanceToClipPlane = Mathf.Approximately(0.0f, projectionDirection) -                        ? Mathf.Infinity -                        : Mathf.Abs((currentEventCamera.farClipPlane - currentEventCamera.nearClipPlane) / projectionDirection); -                } - -                if (blockingObjects == BlockingObjects.ThreeD || blockingObjects == BlockingObjects.All) -                { -                    if (ReflectionMethodsCache.Singleton.raycast3D != null) -                    { -                        var hits = ReflectionMethodsCache.Singleton.raycast3DAll(ray, distanceToClipPlane, (int)m_BlockingMask); -                        if (hits.Length > 0) -                            hitDistance = hits[0].distance; -                    } -                } - -                if (blockingObjects == BlockingObjects.TwoD || blockingObjects == BlockingObjects.All) -                { -                    if (ReflectionMethodsCache.Singleton.raycast2D != null) -                    { -                        var hits = ReflectionMethodsCache.Singleton.getRayIntersectionAll(ray, distanceToClipPlane, (int)m_BlockingMask); -                        if (hits.Length > 0) -                            hitDistance = hits[0].distance; -                    } -                } -            } - -            m_RaycastResults.Clear(); -            Raycast(canvas, currentEventCamera, eventPosition, canvasGraphics, m_RaycastResults); - -            int totalCount = m_RaycastResults.Count; -            for (var index = 0; index < totalCount; index++) -            { -                var go = m_RaycastResults[index].gameObject; -                bool appendGraphic = true; - -                if (ignoreReversedGraphics) -                { -                    if (currentEventCamera == null) -                    { -                        // If we dont have a camera we know that we should always be facing forward -                        var dir = go.transform.rotation * Vector3.forward; -                        appendGraphic = Vector3.Dot(Vector3.forward, dir) > 0; -                    } -                    else -                    { -                        // If we have a camera compare the direction against the cameras forward. -                        var cameraFoward = currentEventCamera.transform.rotation * Vector3.forward; -                        var dir = go.transform.rotation * Vector3.forward; -                        appendGraphic = Vector3.Dot(cameraFoward, dir) > 0; -                    } -                } - -                if (appendGraphic) -                { -                    float distance = 0; - -                    if (currentEventCamera == null || canvas.renderMode == RenderMode.ScreenSpaceOverlay) -                        distance = 0; -                    else -                    { -                        Transform trans = go.transform; -                        Vector3 transForward = trans.forward; -                        // http://geomalgorithms.com/a06-_intersect-2.html -                        distance = (Vector3.Dot(transForward, trans.position - currentEventCamera.transform.position) / Vector3.Dot(transForward, ray.direction)); - -                        // Check to see if the go is behind the camera. -                        if (distance < 0) -                            continue; -                    } - -                    if (distance >= hitDistance) -                        continue; - -                    var castResult = new RaycastResult -                    { -                        gameObject = go, -                        module = this, -                        distance = distance, -                        screenPosition = eventPosition, -                        index = resultAppendList.Count, -                        depth = m_RaycastResults[index].depth, -                        sortingLayer = canvas.sortingLayerID, -                        sortingOrder = canvas.sortingOrder -                    }; -                    resultAppendList.Add(castResult); -                } -            } -        } - -        public override Camera eventCamera -        { -            get -            { -                if (canvas.renderMode == RenderMode.ScreenSpaceOverlay || (canvas.renderMode == RenderMode.ScreenSpaceCamera && canvas.worldCamera == null)) -                    return null; - -                return canvas.worldCamera != null ? canvas.worldCamera : Camera.main; -            } -        } - -        /// <summary> -        /// Perform a raycast into the screen and collect all graphics underneath it. -        /// </summary> -        [NonSerialized] static readonly List<Graphic> s_SortedGraphics = new List<Graphic>(); -        private static void Raycast(Canvas canvas, Camera eventCamera, Vector2 pointerPosition, IList<Graphic> foundGraphics, List<Graphic> results) -        { -            // Debug.Log("ttt" + pointerPoision + ":::" + camera); -            // Necessary for the event system -            int totalCount = foundGraphics.Count; -            for (int i = 0; i < totalCount; ++i) -            { -                Graphic graphic = foundGraphics[i]; - -                // -1 means it hasn't been processed by the canvas, which means it isn't actually drawn -                if (graphic.depth == -1 || !graphic.raycastTarget || graphic.canvasRenderer.cull) -                    continue; - -                if (!RectTransformUtility.RectangleContainsScreenPoint(graphic.rectTransform, pointerPosition, eventCamera)) -                    continue; - -                if (graphic.Raycast(pointerPosition, eventCamera)) -                { -                    s_SortedGraphics.Add(graphic); -                } -            } - -            s_SortedGraphics.Sort((g1, g2) => g2.depth.CompareTo(g1.depth)); -            //      StringBuilder cast = new StringBuilder(); -            totalCount = s_SortedGraphics.Count; -            for (int i = 0; i < totalCount; ++i) -                results.Add(s_SortedGraphics[i]); -            //      Debug.Log (cast.ToString()); - -            s_SortedGraphics.Clear(); -        } -    } -} | 
