123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- using System.Runtime.InteropServices.WindowsRuntime;
- using Rokid.UXR.Interaction;
- using UnityEngine;
- using UnityEngine.EventSystems;
- namespace Rokid.UXR.Components
- {
- public class BezierDragUI : MonoBehaviour, IDragHandler, IEndDragHandler, IBeginDragHandler, IBezierCurveDrag
- {
- [SerializeField]
- public RectTransform canvas;
- private RectTransform imgRect;
- private Vector2 offset;
- private bool IsDraging;
- void Start()
- {
-
- imgRect = GetComponent<RectTransform>();
- }
- public void OnDrag(PointerEventData eventData)
- {
-
- Vector2 mouseDrag = eventData.position;
- Vector2 uguiPos;
- bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, mouseDrag, eventData.enterEventCamera, out uguiPos);
- if (isRect && Mathf.Abs(uguiPos.x) < Screen.width && Mathf.Abs(uguiPos.y) < Screen.height)
- {
-
- if (!UseBezierCurve)
- {
- imgRect.anchoredPosition = offset + uguiPos;
- }
- else
- {
- anchoredPos = offset + uguiPos;
- }
- }
- }
- public void OnBeginDrag(PointerEventData eventData)
- {
- IsDraging = true;
-
- HitPoint = transform.InverseTransformPoint(eventData.pointerCurrentRaycast.worldPosition);
-
-
- Vector2 mouseDown = eventData.position;
- Vector2 mouseUguiPos;
- bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, mouseDown, eventData.enterEventCamera, out mouseUguiPos);
- if (isRect && Mathf.Abs(mouseUguiPos.x) < Screen.width && Mathf.Abs(mouseUguiPos.y) < Screen.height)
- {
- offset = imgRect.anchoredPosition - mouseUguiPos;
- }
- else
- {
- offset = imgRect.anchoredPosition;
- }
- }
- public void OnEndDrag(PointerEventData eventData)
- {
- RKLog.Info("On End Drag");
- IsDraging = false;
- }
- #region BezierCurve
- [SerializeField]
- private bool UseBezierCurve = true;
- [SerializeField]
- private float moveLerpTime = 0.05f;
- private Vector3 HitPoint;
- private Vector2 anchoredPos;
- public bool IsEnablePinchBezierCurve()
- {
- return UseBezierCurve;
- }
- public bool IsEnableGripBezierCurve()
- {
- return false;
- }
- public bool IsInBezierCurveDragging()
- {
- return IsDraging;
- }
- public Vector3 GetBezierCurveEndPoint()
- {
- return transform.TransformPoint(HitPoint);
- }
- private void Update()
- {
- if (UseBezierCurve && IsDraging)
- {
- imgRect.anchoredPosition = Vector2.Lerp(imgRect.anchoredPosition, anchoredPos, 1f - Mathf.Pow(moveLerpTime, Time.deltaTime));
- }
- }
- public Vector3 GetBezierCurveEndNormal()
- {
- return transform.forward;
- }
- #endregion
- }
- }
|