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; private void Update() { 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); } } 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); } } 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; } }