Created
July 31, 2024 12:27
-
-
Save pppoe252110/6dbc2c031a58db016210fed2052f7cb6 to your computer and use it in GitHub Desktop.
Zoom and Move UI Panel Relative to Mouse
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
public class UIZoomMove : MonoBehaviour | |
{ | |
[Header("Zoom")] | |
[SerializeField] private float _zoomSpeed = 0.1f; | |
[SerializeField] private float _minZoom = 0.1f; | |
[SerializeField] private float _maxZoom = 5f; | |
[Header("Properties")] | |
[SerializeField] private Canvas _parentCanvas; | |
private RectTransform _rectTransform; | |
private Vector2 _lastMousePos; | |
void Start() | |
{ | |
_rectTransform = transform as RectTransform; | |
} | |
void Update() | |
{ | |
float scrollDelta = Input.mouseScrollDelta.y; | |
Vector2 mousePos = Input.mousePosition / _parentCanvas.scaleFactor; | |
if (scrollDelta != 0.0f) | |
{ | |
Vector2 mouseDir = mousePos - new Vector2(_parentCanvas.renderingDisplaySize.x / 2f, _parentCanvas.renderingDisplaySize.y / 2f) / _parentCanvas.scaleFactor; | |
var targetScale = _rectTransform.localScale.x * (1f + scrollDelta * _zoomSpeed); | |
var targetScaleClamped = Mathf.Clamp(targetScale, _minZoom, _maxZoom); | |
var scaleDelta = (targetScaleClamped - targetScale) / _rectTransform.localScale.x; | |
var clamp = Mathf.Abs(scaleDelta) / (scrollDelta * _zoomSpeed); | |
_rectTransform.localScale = targetScaleClamped * Vector3.one; | |
_rectTransform.anchoredPosition -= (mouseDir - _rectTransform.anchoredPosition) * (1f - (1f + scrollDelta * -_zoomSpeed)) * (1f - Mathf.Abs(clamp)); | |
} | |
if (Input.GetMouseButtonDown(2)) | |
{ | |
_lastMousePos = mousePos; | |
} | |
if (Input.GetMouseButton(2)) | |
{ | |
Vector2 mouseMoveDir = mousePos - _lastMousePos; | |
_rectTransform.anchoredPosition += mouseMoveDir; | |
_lastMousePos = mousePos; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment