diff options
Diffstat (limited to '_Debug/SimpleMoveCamera.cs')
-rw-r--r-- | _Debug/SimpleMoveCamera.cs | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/_Debug/SimpleMoveCamera.cs b/_Debug/SimpleMoveCamera.cs new file mode 100644 index 0000000..35a7360 --- /dev/null +++ b/_Debug/SimpleMoveCamera.cs @@ -0,0 +1,139 @@ + +using UnityEngine; +/// <summary> +/// A simple free camera to be added to a Unity game object. +/// +/// Keys: +/// wasd / arrows - movement +/// q/e - up/down (local space) +/// r/f - up/down (world space) +/// pageup/pagedown - up/down (world space) +/// hold shift - enable fast movement mode +/// right mouse - enable free look +/// mouse - free look / rotation +/// +/// </summary> +public class SimpleMoveCamera : MonoBehaviour +{ + /// <summary> + /// Normal speed of camera movement. + /// </summary> + public float movementSpeed = 10f; + + /// <summary> + /// Speed of camera movement when shift is held down, + /// </summary> + public float fastMovementSpeed = 100f; + + /// <summary> + /// Sensitivity for free look. + /// </summary> + public float freeLookSensitivity = 3f; + + /// <summary> + /// Amount to zoom the camera when using the mouse wheel. + /// </summary> + public float zoomSensitivity = 10f; + + /// <summary> + /// Amount to zoom the camera when using the mouse wheel (fast mode). + /// </summary> + public float fastZoomSensitivity = 50f; + + /// <summary> + /// Set to true when free looking (on right mouse button). + /// </summary> + private bool looking = false; + + void Update() + { + var fastMode = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift); + var movementSpeed = fastMode ? this.fastMovementSpeed : this.movementSpeed; + + if (Input.GetKey(KeyCode.H) || Input.GetKey(KeyCode.LeftArrow)) + { + transform.position = transform.position + (-transform.right * movementSpeed * Time.deltaTime); + } + + if (Input.GetKey(KeyCode.K) || Input.GetKey(KeyCode.RightArrow)) + { + transform.position = transform.position + (transform.right * movementSpeed * Time.deltaTime); + } + + if (Input.GetKey(KeyCode.U) || Input.GetKey(KeyCode.UpArrow)) + { + transform.position = transform.position + (transform.forward * movementSpeed * Time.deltaTime); + } + + if (Input.GetKey(KeyCode.J) || Input.GetKey(KeyCode.DownArrow)) + { + transform.position = transform.position + (-transform.forward * movementSpeed * Time.deltaTime); + } + if (Input.GetKey(KeyCode.Q)) + { + transform.position = transform.position + (transform.up * movementSpeed * Time.deltaTime); + } + if (Input.GetKey(KeyCode.E)) + { + transform.position = transform.position + (-transform.up * movementSpeed * Time.deltaTime); + } + + if (Input.GetKey(KeyCode.R) || Input.GetKey(KeyCode.PageUp)) + { + transform.position = transform.position + (Vector3.up * movementSpeed * Time.deltaTime); + } + + if (Input.GetKey(KeyCode.F) || Input.GetKey(KeyCode.PageDown)) + { + transform.position = transform.position + (-Vector3.up * movementSpeed * Time.deltaTime); + } + + if (looking) + { + float newRotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * freeLookSensitivity; + float newRotationY = transform.localEulerAngles.x - Input.GetAxis("Mouse Y") * freeLookSensitivity; + transform.localEulerAngles = new Vector3(newRotationY, newRotationX, 0f); + } + + float axis = Input.GetAxis("Mouse ScrollWheel"); + if (axis != 0) + { + var zoomSensitivity = fastMode ? this.fastZoomSensitivity : this.zoomSensitivity; + transform.position = transform.position + transform.forward * axis * zoomSensitivity; + } + + if (Input.GetKeyDown(KeyCode.Mouse1)) + { + StartLooking(); + } + else if (Input.GetKeyUp(KeyCode.Mouse1)) + { + StopLooking(); + } + } + + void OnDisable() + { + StopLooking(); + } + + /// <summary> + /// Enable free looking. + /// </summary> + public void StartLooking() + { + looking = true; + Cursor.visible = false; + Cursor.lockState = CursorLockMode.Locked; + } + + /// <summary> + /// Disable free looking. + /// </summary> + public void StopLooking() + { + looking = false; + Cursor.visible = true; + Cursor.lockState = CursorLockMode.None; + } +}
\ No newline at end of file |