52 lines
2.1 KiB
C#
52 lines
2.1 KiB
C#
using UnityEngine;
|
|
|
|
public class CameraController : MonoBehaviour
|
|
{
|
|
[Header("Настройки перемещения")]
|
|
public float moveSpeed = 10f;
|
|
|
|
[Header("Настройки зума")]
|
|
public float zoomSpeed = 2f; // скорость изменения размера
|
|
public float minOrthoSize = 2f; // минимальный размер (максимальное приближение)
|
|
public float maxOrthoSize = 50f; // максимальный размер (максимальное удаление)
|
|
|
|
private Vector3 _lastMousePosition;
|
|
private bool _isDragging = false;
|
|
|
|
void Update()
|
|
{
|
|
// --- Перемещение по зажатой левой кнопке мыши ---
|
|
if (Input.GetMouseButtonDown(0) && !UIBlocker.IsPointerOverUI()) // не тащим камеру, когда листаем панель
|
|
{
|
|
_lastMousePosition = Input.mousePosition;
|
|
_isDragging = true;
|
|
}
|
|
else if (Input.GetMouseButtonUp(0))
|
|
{
|
|
_isDragging = false;
|
|
}
|
|
|
|
if (_isDragging)
|
|
{
|
|
Vector3 currentMousePosition = Input.mousePosition;
|
|
Vector3 delta = currentMousePosition - _lastMousePosition;
|
|
|
|
// Двигаем камеру (инвертируем Y, потому что экранные координаты вверх, а мир вниз)
|
|
transform.position += new Vector3(-delta.x, delta.y, 0) * moveSpeed * Time.deltaTime;
|
|
|
|
_lastMousePosition = currentMousePosition;
|
|
}
|
|
|
|
// --- Зум по колёсику мыши ---
|
|
float scroll = Input.GetAxis("Mouse ScrollWheel");
|
|
if (scroll != 0f && !UIBlocker.IsPointerOverUI())
|
|
{
|
|
Camera cam = GetComponent<Camera>();
|
|
float targetSize = cam.orthographicSize - scroll * zoomSpeed;
|
|
|
|
// Ограничиваем зум диапазоном
|
|
targetSize = Mathf.Clamp(targetSize, minOrthoSize, maxOrthoSize);
|
|
cam.orthographicSize = targetSize;
|
|
}
|
|
}
|
|
} |