/
GeekNerd
/
ServerModelingProject
Обзор
Документация
Войти
/
GeekNerd
/
ServerModelingProject
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Assets/Scripts/RoomBuilding/MapViewController.cs
95 строк
3 KB
Gorney-Alex
Init
30 май 2026, 19:05
30 май 2026, 19:05
3cdcc49
Код
Авторство
О чём код?
using UnityEngine; using UnityEngine.EventSystems; using Zenject; namespace RoomBuilding { public class MapViewController : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IBeginDragHandler, IDragHandler, IEndDragHandler, IScrollHandler { private RectTransform _mapContent; private float minScale = 0.3f; private float maxScale = 3.0f; private float zoomSpeed = 0.1f; private Vector2 _lastPointerPosition; private bool _isDragging; private int _dragButton = 1; [Inject] public void Construct(MapContentView mapContentView) { _mapContent = mapContentView.transform as RectTransform; } public void OnPointerDown(PointerEventData eventData) { if ((int)eventData.button == _dragButton) { _isDragging = true; _lastPointerPosition = eventData.position; } } public void OnBeginDrag(PointerEventData eventData) { if ((int)eventData.button != _dragButton) { return; } _isDragging = true; _lastPointerPosition = eventData.position; } public void OnDrag(PointerEventData eventData) { if (!_isDragging || _mapContent == null) return; var delta = eventData.position - _lastPointerPosition; _lastPointerPosition = eventData.position; _mapContent.anchoredPosition += delta; } public void OnPointerUp(PointerEventData eventData) { if ((int)eventData.button == _dragButton) { _isDragging = false; } } public void OnEndDrag(PointerEventData eventData) { _isDragging = false; } public void OnScroll(PointerEventData eventData) { if (_mapContent == null) { return; } float scroll = eventData.scrollDelta.y; if (Mathf.Approximately(scroll, 0f)) return; float currentScale = _mapContent.localScale.x; float newScale = Mathf.Clamp(currentScale + scroll * zoomSpeed, minScale, maxScale); RectTransformUtility.ScreenPointToLocalPointInRectangle( _mapContent, eventData.position, eventData.pressEventCamera, out var localPoint); var scaleFactor = newScale / currentScale; _mapContent.localScale = Vector3.one * newScale; _mapContent.anchoredPosition -= localPoint * (scaleFactor - 1f); } } }