How to make the border of the map and pan the map the same?

I use a map larger than the screen that I am viewing. Therefore, I need to be able to move around this map. I have a problem fixing the camera and card. I want to be able to use the image of the image as the width and height of the clip. The problem is in units.

Image 2144 x 1708 The transpose of the camera is in one digit (14 x 7) or something like that.

All the code I use is below.

private Vector3 mouseOrigin; // Position of cursor when mouse dragging starts private bool isPanning; // Is the camera being panned? public bool useBoundary = true; public Vector2 boundaryMin; public Vector2 boundaryMax; public Image map; void Start() { Camera cam = Camera.main; float mapRatio = map.rectTransform.rect.width / map.rectTransform.rect.height; float mapScreenHeight = (1.5f * cam.orthographicSize); float mapScreenWidth = (3f * mapScreenHeight) * cam.aspect; boundaryMin = new Vector2(0, 1); boundaryMax = new Vector2(map.rectTransform.rect.width, map.rectTransform.rect.height); } void Update() { // Get the left mouse button if (Input.GetMouseButtonDown(0)) { // Get mouse origin mouseOrigin = Input.mousePosition; isPanning = true; } // Disable movements on button release if (!Input.GetMouseButton(0)) isPanning = false; // Rotate camera along X and Y axis // Move the camera on it XY plane if (isPanning) { Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - mouseOrigin); Vector3 move = new Vector3(pos.x * panSpeed, pos.y * panSpeed, 0); transform.Translate(move, Space.Self); BoundaryCheck(); } } void BoundaryCheck() { if (!useBoundary) return; Vector3 newPos = transform.position; newPos.x = Mathf.Clamp(newPos.x, boundaryMin.x, boundaryMax.x); newPos.y = Mathf.Clamp(newPos.y, boundaryMin.y, boundaryMax.y); transform.position = newPos; } 

}

Any help would be greatly appreciated.

+6
source share
2 answers

You can do this using the Unity UI - Scroll Rect.

Check out Unity UI - Scroll Rect - Introduction

+2
source

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 } 
+1
source

All Articles