using UnityEngine; using System.Collections; public class CameraZoom : MonoBehaviour { private float _speedMouse = 350.0f; private float _speedTouch = 100.0f; float touchDist = 0; float lastDist = 0; public GameObject Draw2D; // --- PAN 2D --- public float panSpeed2D = 1.0f; // vitesse de pan du plan 2D private bool isPanning2D = false; private Vector3 lastMousePanPos2D; private void Update() { // --- ZOOM NAVIGATE PERSPECTIVE --- if (SceneModeManager.CompareSceneMode(SceneModes.Navigate) && _G.CAMSET != CamSettings.Ortho && _G.CAMSET != CamSettings.Plan2D) { float mouseScroll = Input.GetAxis("Mouse ScrollWheel"); if (mouseScroll != 0 && MouseCheck.InOut() == true) { ZoomCamera(mouseScroll, false); } } // --- ZOOM NAVIGATE ORTHO / PLAN2D CAMERA --- if (SceneModeManager.CompareSceneMode(SceneModes.Navigate) && (_G.CAMSET == CamSettings.Ortho || _G.CAMSET == CamSettings.Plan2D)) { float mouseScroll = Input.GetAxis("Mouse ScrollWheel"); if (mouseScroll != 0 && MouseCheck.InOut() == true) { Camera cam = GetComponent(); float scale = cam.orthographicSize; scale = Mathf.Clamp(scale - mouseScroll * 10, 1, float.MaxValue); cam.orthographicSize = scale; CAPS.SHOW_TOP(true, scale / 150); } } // --- ZOOM + PAN SUR LE PLAN 2D UI --- if (Draw2D.activeInHierarchy) { float mouseScroll = Input.GetAxis("Mouse ScrollWheel"); // ZOOM 2D (scale) if (mouseScroll != 0 && MouseCheck.InOut()) { float zoomFactor = 1 + mouseScroll * 0.5f; Vector3 newScale = Draw2D.transform.localScale * zoomFactor; // limites float s = Mathf.Clamp(newScale.x, 0.3f, 8f); Draw2D.transform.localScale = new Vector3(s, s, 1); } // PAN 2D avec bouton du scroll (middle mouse = button 2) if (Input.GetMouseButtonDown(2) && MouseCheck.InOut()) { isPanning2D = true; lastMousePanPos2D = Input.mousePosition; } if (Input.GetMouseButton(2) && isPanning2D) { Vector3 currentMousePos = Input.mousePosition; Vector3 delta = currentMousePos - lastMousePanPos2D; lastMousePanPos2D = currentMousePos; // si le sens est à l'envers, remplace "+=" par "-=" Draw2D.transform.position += delta * panSpeed2D; } if (Input.GetMouseButtonUp(2)) { isPanning2D = false; } } // --- ZOOM TOUCH (PINCH) SUR LA CAMÉRA --- if (Input.touchCount == 2) { Touch touch1 = Input.GetTouch(0); Touch touch2 = Input.GetTouch(1); SceneModeManager.Instance.SetSceneMode(SceneModes.ZoomTouch); if (touch1.phase == TouchPhase.Began && touch2.phase == TouchPhase.Began) { lastDist = Vector2.Distance(touch1.position, touch2.position); } if (touch1.phase == TouchPhase.Moved && touch2.phase == TouchPhase.Moved) { float newDist = Vector2.Distance(touch1.position, touch2.position); touchDist = lastDist - newDist; lastDist = newDist; ZoomCamera(-touchDist, true); } } } void ZoomCamera(float scrollValue, bool isTouch) { Vector3 positionBefore = transform.position; Vector3 centerToCamBefore = (positionBefore - _G.CC).normalized; float scrollSpeed = isTouch ? _speedTouch : _speedMouse; transform.Translate(Mathf.Sign(scrollValue) * scrollSpeed * Time.deltaTime * transform.forward, Space.World); Vector3 positionAfter = transform.position; Vector3 centerToCamAfter = (positionAfter - _G.CC).normalized; float dotTranslation = Vector3.Dot(centerToCamBefore, centerToCamAfter); if (dotTranslation < 0f) { transform.position = _G.CC; } else if (dotTranslation == 0) { Vector3 directionTranslate = (positionAfter - positionBefore).normalized; float dotDirection = Vector3.Dot(directionTranslate, -1.0f * transform.forward); if (dotDirection < 0f) { transform.position = _G.CC; } } _G.Camz = transform.position.z; } }