In my opinion, you need to use below script for camera pan, zoom and rotate . You can disable any unwanted function. Now, according to your question, you should limit the movement (according to your image border). itโs just that you can restrict the movement of the camera on the differential axis according to your limitations. You must place the cubes in the borders of the map and use their positions as the limit of the cameraโs movement and panning, etc.
using UnityEngine; using System.Collections; public class CamMovementManager : MonoBehaviour { #region Vars public float turnSpeed = 1.0f; // Speed of camera turning when mouse moves in along an axis public float panSpeed = 4.0f; // Speed of the camera when being panned public float zoomSpeed = 4.0f; // Speed of the camera going back and forth private Vector3 mouseOrigin; // Position of cursor when mouse dragging starts private bool isPanning; // Is the camera being panned? private bool isRotating; // Is the camera being rotated? private bool isZooming; // Is the camera zooming? private float pannPosLimit = 300f; private int fovMin = 15; private int fovMax = 90; #endregion Vars #region UnityEvents void Update() { // Get the left mouse button if (Input.GetMouseButtonDown(0)) { // Get mouse origin mouseOrigin = Input.mousePosition; isRotating = true; } // Get the right mouse button if (Input.GetMouseButtonDown(1)) { // Get mouse origin mouseOrigin = Input.mousePosition; isPanning = true; } // Get the middle mouse button if (Input.GetMouseButtonDown(2)) { // Get mouse origin //mouseOrigin = Input.mousePosition; //isZooming = true; } //changing fov on mouse scroll to zoomIn/out float fov = Camera.main.fieldOfView; fov += Input.GetAxis("Mouse ScrollWheel") * 10f; fov = Mathf.Clamp(fov, fovMin, fovMax); Camera.main.fieldOfView = fov;//*/ // Disable movements on button release if (!Input.GetMouseButton(0)) isRotating = false; if (!Input.GetMouseButton(1)) isPanning = false; if (!Input.GetMouseButton(2)) isZooming = false; // Rotate camera along X and Y axis if (isRotating) { Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - mouseOrigin); //Debug.Log("rotate pos : " + pos); transform.RotateAround(transform.position, transform.right, -pos.y * turnSpeed); transform.RotateAround(transform.position, Vector3.up, pos.x * turnSpeed); } // Move the camera on it XY plane if (isPanning) { if (Input.mousePosition.y > pannPosLimit) { Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - mouseOrigin); Vector3 move = new Vector3(pos.x * panSpeed, pos.y * panSpeed, 0); transform.Translate(move, Space.Self); } } // Move the camera linearly along Z axis if (isZooming) { Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - mouseOrigin); Vector3 move = pos.y * zoomSpeed * transform.forward; transform.Translate(move, Space.World); } } #endregion #region CustomMethods public void CamRotating() { Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - mouseOrigin); transform.RotateAround(transform.position, transform.right, -pos.y * turnSpeed); transform.RotateAround(transform.position, Vector3.up, pos.x * turnSpeed); } public void CamPanning() { Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - mouseOrigin); Vector3 move = new Vector3(pos.x * panSpeed, pos.y * panSpeed, 0); transform.Translate(move, Space.Self); } public void CamZooming() { Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - mouseOrigin); Vector3 move = pos.y * zoomSpeed * transform.forward; transform.Translate(move, Space.World); } #endregion CustomMethods }
source share