Advertisement
Serious07

Custom UI Bar

Aug 30th, 2021
1,306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.39 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEngine.EventSystems;
  3. using UnityEngine.UI;
  4.  
  5. [RequireComponent(typeof(Image))]
  6. public class UIBarControl : MonoBehaviour, IDragHandler
  7. {
  8.     private float newLocalY;
  9.     [SerializeField] private Canvas canvas;
  10.     private Vector2 canvasPosition;
  11.     [SerializeField] private RectTransform parentRectContainer;
  12.  
  13.     private float minY;
  14.     private float maxY;
  15.  
  16.     public void OnDrag(PointerEventData eventData)
  17.     {
  18.         float oldPositionX = transform.position.x;
  19.  
  20.         MoveToCursorPosition();
  21.         ClampLocalPosition(oldPositionX);
  22.     }
  23.  
  24.     private void MoveToCursorPosition()
  25.     {
  26.         RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform,
  27.                                                                 Input.mousePosition, canvas.worldCamera, out canvasPosition);
  28.         transform.position = canvas.transform.TransformPoint(canvasPosition);
  29.     }
  30.  
  31.     private void ClampLocalPosition(float oldPositionX)
  32.     {
  33.         newLocalY = transform.position.y;
  34.  
  35.         minY = parentRectContainer.transform.position.y + parentRectContainer.offsetMin.y;
  36.         maxY = parentRectContainer.transform.position.y + parentRectContainer.offsetMax.y;
  37.  
  38.         newLocalY = Mathf.Clamp(newLocalY, minY, maxY);
  39.         transform.position = new Vector3(oldPositionX, newLocalY, transform.localPosition.z);
  40.     }
  41. }
  42.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement