public static void AddRaycaster(Pointer3DRaycaster raycaster) { if (raycasters.AddUnique(raycaster)) { Initialize(); } }
protected void CleanUpRaycaster(Pointer3DRaycaster raycaster) { raycaster.CleanUpRaycast(); var hoverEventData = raycaster.HoverEventData; // hover event hoverEventData.pointerCurrentRaycast = default(RaycastResult); if (hoverEventData.pointerEnter != null) { HandlePointerExitAndEnter(hoverEventData, null); } // buttons event for (int i = 0, imax = raycaster.ButtonEventDataList.Count; i < imax; ++i) { var buttonEventData = raycaster.ButtonEventDataList[i]; if (buttonEventData == null) { continue; } buttonEventData.Reset(); buttonEventData.pointerCurrentRaycast = default(RaycastResult); ProcessPressUp(buttonEventData); if (buttonEventData.pointerEnter != null) { HandlePointerExitAndEnter(buttonEventData, null); } } }
public static void RemoveRaycasters(Pointer3DRaycaster raycaster) { if (raycasters.Remove(raycaster) && Active) { instance.DisableRaycaster(raycaster); } }
protected virtual void OnDestroy() { if (m_raycaster != null) { raycaster.RemoveRaycastMethod(this); } m_raycaster = null; }
protected virtual void Start() { m_raycaster = GetComponent <Pointer3DRaycaster>(); if (m_raycaster != null) { m_raycaster.AddRaycastMethod(this); } }
protected virtual void OnDestroy() { if (m_raycaster != null) { raycaster.RemoveGenerator(this); } m_raycaster = null; }
public static void AddRaycaster(Pointer3DRaycaster raycaster) { if (raycaster == null) { return; } Initialize(); raycasters.AddUnique(raycaster); }
protected void CleanUpRaycaster(Pointer3DRaycaster raycaster) { if (raycaster == null) { return; } var hoverEventData = raycaster.HoverEventData; if (hoverEventData == null || raycaster.ButtonEventDataList.Count == 0) { return; } hoverEventData.Reset(); // buttons event for (int i = 0, imax = raycaster.ButtonEventDataList.Count; i < imax; ++i) { var buttonEventData = raycaster.ButtonEventDataList[i]; if (buttonEventData == null || buttonEventData == hoverEventData) { continue; } buttonEventData.Reset(); if (buttonEventData.eligibleForClick) { ProcessPressUp(buttonEventData); HandlePressExitAndEnter(buttonEventData, null); } if (buttonEventData.pointerEnter != null) { if (i == 0) { // perform exit event for hover event data HandlePointerExitAndEnter(buttonEventData, null); } else { buttonEventData.pointerEnter = null; } } } raycaster.CleanUpRaycast(); for (int i = 0, imax = raycaster.ButtonEventDataList.Count; i < imax; ++i) { raycaster.ButtonEventDataList[i].pointerPressRaycast = default(RaycastResult); raycaster.ButtonEventDataList[i].pointerCurrentRaycast = default(RaycastResult); } }
public static void RemoveRaycaster(Pointer3DRaycaster raycaster) { if (!raycasters.Remove(raycaster)) { return; } if (!processingRaycasters.Contains(raycaster) && Active) { Instance.CleanUpRaycaster(raycaster); } }
public static bool TryGetRaycaster3D(this PointerEventData eventData, out Pointer3DRaycaster raycaster) { raycaster = null; if (!(eventData is Pointer3DEventData)) { return(false); } var eventData3D = eventData as Pointer3DEventData; raycaster = eventData3D.raycaster; return(true); }
protected void DisableRaycaster(Pointer3DRaycaster raycaster) { if (ReferenceEquals(raycaster, null)) { return; } // hover event var hoverEventData = raycaster.HoverEventData; hoverEventData.pointerCurrentRaycast = default(RaycastResult); if (hoverEventData.pointerEnter != null) { HandlePointerExitAndEnter(hoverEventData, null); } // buttons event for (int i = 0, imax = raycaster.ButtonEventDataList.Count; i < imax; ++i) { var buttonEventData = raycaster.ButtonEventDataList[i]; if (buttonEventData == null) { continue; } buttonEventData.Reset(); buttonEventData.pointerCurrentRaycast = default(RaycastResult); ProcessPressUp(buttonEventData); if (buttonEventData.pointerEnter != null) { HandlePointerExitAndEnter(buttonEventData, null); } } }
public static void Raycast(Canvas canvas, bool ignoreReversedGraphics, Ray ray, float distance, Pointer3DRaycaster raycaster, List <RaycastResult> raycastResults) { if (canvas == null) { return; } var eventCamera = raycaster.eventCamera; var screenCenterPoint = Pointer3DInputModule.ScreenCenterPoint; var graphics = GraphicRegistry.GetGraphicsForCanvas(canvas); // Pointer3DRaycaster should set tje eventCamera to correct position for (int i = 0; i < graphics.Count; ++i) { var graphic = graphics[i]; // -1 means it hasn't been processed by the canvas, which means it isn't actually drawn if (graphic.depth == -1 || !graphic.raycastTarget) { continue; } if (!RectTransformUtility.RectangleContainsScreenPoint(graphic.rectTransform, screenCenterPoint, eventCamera)) { continue; } if (ignoreReversedGraphics && Vector3.Dot(ray.direction, graphic.transform.forward) <= 0f) { continue; } if (!graphic.Raycast(screenCenterPoint, eventCamera)) { continue; } //var dist = Vector3.Dot(transForward, trans.position - ray.origin) / Vector3.Dot(transForward, ray.direction); float dist; new Plane(graphic.transform.forward, graphic.transform.position).Raycast(ray, out dist); if (dist > distance) { continue; } raycastResults.Add(new RaycastResult { gameObject = graphic.gameObject, module = raycaster, distance = dist, worldPosition = ray.GetPoint(dist), worldNormal = -graphic.transform.forward, screenPosition = screenCenterPoint, index = raycastResults.Count, depth = graphic.depth, sortingLayer = canvas.sortingLayerID, sortingOrder = canvas.sortingOrder }); } }
public static void RemoveRaycasters(Pointer3DRaycaster raycaster) { RemoveRaycaster(raycaster); }
public Pointer3DEventData(Pointer3DRaycaster ownerRaycaster, EventSystem eventSystem) : base(eventSystem) { raycaster = ownerRaycaster; Pointer3DInputModule.AssignPointerId(this); }
public StandaloneEventData(Pointer3DRaycaster ownerRaycaster, EventSystem eventSystem, StandaloneButton sbtn, InputButton ibtn) : base(ownerRaycaster, eventSystem) { standaloneButton = sbtn; button = ibtn; }