-
-
Save auycro/89f0ff39e62c03a5de85ef0203402824 to your computer and use it in GitHub Desktop.
Camera movement script in Unity3D. Supports rotating, panning, and zooming. Attach to the main camera. Tutorial explaining code: http://jibransyed.wordpress.com/2013/02/22/rotating-panning-and-zooming-a-camera-in-unity/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Credit to damien_oconnell from http://forum.unity3d.com/threads/39513-Click-drag-camera-movement | |
// for using the mouse displacement for calculating the amount of camera movement and panning code. | |
using UnityEngine; | |
using System.Collections; | |
public class MoveCamera : MonoBehaviour | |
{ | |
// | |
// VARIABLES | |
// | |
public float turnSpeed = 4.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? | |
// | |
// UPDATE | |
// | |
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; | |
} | |
// 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); | |
transform.RotateAround(transform.position, transform.right, -pos.y * turnSpeed); | |
transform.RotateAround(transform.position, Vector3.up, pos.x * turnSpeed); | |
} | |
// Move the camera on it's 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); | |
} | |
// 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); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment