/// <summary> /// Update the cursor's position and visual state /// </summary> /// <param name="eventData"></param> /// <param name="pressState"></param> public void UpdateCursor(MetaHandEventData eventData, PressState pressState) { float ringScale = _ringPanelProximityScale.Evaluate(eventData.DownDistance); _ring.transform.position = eventData.ProjectedPanelPosition; _ring.transform.localPosition = new Vector3(_ring.transform.localPosition.x, _ring.transform.localPosition.y, 0); _ring.transform.localScale = Vector3.one * ringScale; _ring.Alpha = _ringPanelProximityAlpha.Evaluate(eventData.DownDistance); _ring2.transform.position = eventData.ProjectedPanelPosition; _ring2.transform.localPosition = new Vector3(_ring2.transform.localPosition.x, _ring2.transform.localPosition.y, 0); _ring2.transform.localScale = Vector3.one * (ringScale + _ring2.Thickness); _ring2.Alpha = _ring.Alpha; _fill.transform.position = eventData.ProjectedPanelPosition; _fill.transform.localPosition = new Vector3(_fill.transform.localPosition.x, _fill.transform.localPosition.y, 0); _fill.Alpha = eventData.DownDistance < 0 ? _ring.Alpha * FillAlpha : FillAlpha; _fillOutline.transform.position = eventData.ProjectedPanelPosition; _fillOutline.Alpha = eventData.DownDistance < 0 ? _ring.Alpha * FillOutlineAlpha : FillOutlineAlpha; _hoverPower = Mathf.SmoothDamp(_hoverPower, (_isHovering ? 1 : 0), ref _hoverPowerVelocity, HoverEffectSeconds); _dot.transform.position = eventData.ProjectedPanelPosition; _dot.transform.localPosition = new Vector3(_dot.transform.localPosition.x, _dot.transform.localPosition.y, 0); _dot.transform.localScale = Vector3.one * (_fullDotScale * Mathf.Lerp(DotUnhoveredScale, 1, _hoverPower)); float dotAlpha = Mathf.Lerp(DotUnhoveredAlpha, 1, _hoverPower); _dot.Alpha = eventData.DownDistance < 0 ? _ring.Alpha * dotAlpha : dotAlpha; if (_isHovering && pressState == PressState.Pressed) { _canvasPressIndicator.PlayAnimation(eventData.ProjectedPanelPosition); } }
/// <summary> /// /// </summary> /// <param name="eventData"></param> public void ProcessDrag(MetaHandEventData eventData) { bool moving = eventData.IsPointerMoving(); if (moving && eventData.pointerDrag != null && !eventData.dragging && ShouldStartDrag(eventData.pressPosition, eventData.position, EventSystem.pixelDragThreshold, eventData.useDragThreshold)) { ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.beginDragHandler); eventData.dragging = true; } // Drag notification if (eventData.dragging && moving && eventData.pointerDrag != null) { // Before doing drag we should cancel any pointer down state // And clear selection! if (eventData.pointerPress != eventData.pointerDrag) { ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler); eventData.eligibleForClick = false; eventData.pointerPress = null; eventData.rawPointerPress = null; } ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.dragHandler); } }
/// <summary> /// Handle when the hand continues hovering over a UI element /// </summary> /// <param name="pointerEventData"></param> public void HoverStay(PointerEventData pointerEventData) { if (pointerEventData is MetaHandEventData) { MetaHandEventData metaHandEventData = (MetaHandEventData)pointerEventData; _crosshair.transform.position = metaHandEventData.ProjectedPanelPosition; _crosshair.transform.localPosition = new Vector3(_crosshair.transform.localPosition.x, _crosshair.transform.localPosition.y, 0); } }
/// <summary> /// Handle when the hand hovers over a UI element /// </summary> /// <param name="pointerEventData"></param> public void HoverBegin(PointerEventData pointerEventData) { if (pointerEventData is MetaHandEventData) { _isHovering = true; _crosshair.gameObject.SetActive(true); MetaHandEventData metaHandEventData = (MetaHandEventData)pointerEventData; _crosshair.transform.position = metaHandEventData.ProjectedPanelPosition; _crosshair.transform.localPosition = new Vector3(_crosshair.transform.localPosition.x, _crosshair.transform.localPosition.y, 0); } }
/// <summary> /// Get the correct camera for a pointer /// </summary> /// <param name="pointerEventData"></param> /// <returns></returns> public static Camera GetMetaHandEventDataPressEventCamera(PointerEventData pointerEventData) { MetaHandEventData data = pointerEventData as MetaHandEventData; if (pointerEventData != null) { return(data == null ? pointerEventData.pressEventCamera : data.pressEventCamera); } else { return(null); } }
private void Start() { //Get the collider defining the bounds _collider = GetComponent <BoxCollider>(); if (!_collider.isTrigger) { Debug.LogWarning(name + " EventVolume collider must be trigger."); } _raycaster = GetComponentInParent <MetaHandGraphicsRaycaster>(); _raycaster.Register(this); _pointerData = new MetaHandEventData(_raycaster.EventSystem); _pointerData.pointerId = _nextId++; }
/// <summary> /// Get the correct camera for a pointer /// </summary> /// <param name="pointerEventData"></param> /// <returns></returns> public static Camera GetMetaHandEventDataPressEventCamera(PointerEventData pointerEventData) { MetaHandEventData data = pointerEventData as MetaHandEventData; return(data == null ? pointerEventData.pressEventCamera : data.pressEventCamera);; }