From cc55520a19043a7b4870858e962fa3e20c46bc39 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Thu, 14 Mar 2024 11:43:40 +0800 Subject: *misc --- _Debug/SimpleMoveCamera.cs | 139 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 _Debug/SimpleMoveCamera.cs (limited to '_Debug/SimpleMoveCamera.cs') 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; +/// +/// 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 +/// +/// +public class SimpleMoveCamera : MonoBehaviour +{ + /// + /// Normal speed of camera movement. + /// + public float movementSpeed = 10f; + + /// + /// Speed of camera movement when shift is held down, + /// + public float fastMovementSpeed = 100f; + + /// + /// Sensitivity for free look. + /// + public float freeLookSensitivity = 3f; + + /// + /// Amount to zoom the camera when using the mouse wheel. + /// + public float zoomSensitivity = 10f; + + /// + /// Amount to zoom the camera when using the mouse wheel (fast mode). + /// + public float fastZoomSensitivity = 50f; + + /// + /// Set to true when free looking (on right mouse button). + /// + 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(); + } + + /// + /// Enable free looking. + /// + public void StartLooking() + { + looking = true; + Cursor.visible = false; + Cursor.lockState = CursorLockMode.Locked; + } + + /// + /// Disable free looking. + /// + public void StopLooking() + { + looking = false; + Cursor.visible = true; + Cursor.lockState = CursorLockMode.None; + } +} \ No newline at end of file -- cgit v1.1-26-g67d0