diff options
author | chai <215380520@qq.com> | 2024-03-21 10:28:46 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-03-21 10:28:46 +0800 |
commit | 3fb2121cc0d00cbd42b2ca10b5dfb399a4df1a04 (patch) | |
tree | c1f4683fb021522b459408ab1ad61c40be77ee47 /GameCode/CameraController.cs | |
parent | 9ee2cfa385ed77c39003f524f5f03079124fc476 (diff) |
*misc
Diffstat (limited to 'GameCode/CameraController.cs')
-rw-r--r-- | GameCode/CameraController.cs | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/GameCode/CameraController.cs b/GameCode/CameraController.cs new file mode 100644 index 0000000..2b91184 --- /dev/null +++ b/GameCode/CameraController.cs @@ -0,0 +1,96 @@ +using UnityEngine; + +public class CameraController : MonoBehaviour +{ + public static CameraController instance; + + [SerializeField] + private Vector3 velocity = Vector3.zero; + + [SerializeField] + private float cameraSpeed = 10f; + + [SerializeField] + private float cameraBaseZoom = 10f; + + [SerializeField] + private GameObject cameraHolder; + + [SerializeField] + private Transform audioListenerObject; + + [SerializeField] + private LayerMask zeroMask; + + private Vector3 clickMoveOrigin; + + private Vector3 cameraOrigin; + + private void Awake() + { + instance = this; + } + + private void Start() + { + Camera.main.orthographicSize = cameraBaseZoom; + if (audioListenerObject != null) + { + audioListenerObject.position = new Vector3(audioListenerObject.position.x, cameraBaseZoom, audioListenerObject.position.z); + } + } + + private void Update() + { + UpdateMovement(); + UpdateZoom(); + } + + private void UpdateMovement() + { + if (Input.GetKeyDown(KeyCode.C)) + { + base.transform.position = Vector3.zero; + } + if (Input.GetMouseButtonDown(1) && Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out var hitInfo, 2000f, zeroMask, QueryTriggerInteraction.Collide)) + { + clickMoveOrigin = hitInfo.point; + cameraOrigin = base.transform.position; + } + if (Input.GetMouseButton(1)) + { + if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out var hitInfo2, 2000f, zeroMask, QueryTriggerInteraction.Collide)) + { + Vector3 vector = cameraOrigin - 2f * (hitInfo2.point - clickMoveOrigin); + base.transform.position = (base.transform.position + vector) / 2f; + } + return; + } + if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) + { + velocity *= 1f - Time.deltaTime; + velocity += new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * Time.deltaTime * 2f; + float num = Mathf.Clamp(Camera.main.orthographicSize / 10f, 1f, 5f); + base.transform.Translate(velocity * Time.deltaTime * cameraSpeed * num); + return; + } + velocity = Vector3.zero; + Vector3 vector2 = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")); + if (vector2.sqrMagnitude > 0.1f) + { + float num2 = Mathf.Clamp(Camera.main.orthographicSize / 10f, 1f, 5f); + base.transform.Translate(vector2.normalized * Time.deltaTime * cameraSpeed * num2); + } + } + + private void UpdateZoom() + { + float num = Mathf.Clamp(Camera.main.orthographicSize - Input.mouseScrollDelta.y, 1f, 50f); + Camera.main.orthographicSize = num; + cameraHolder.transform.localPosition = new Vector3(0f, 5f + 2f * num, -2f * num - 5f); + if (audioListenerObject != null) + { + audioListenerObject.position = new Vector3(audioListenerObject.position.x, (num + 10f) / 2f, audioListenerObject.position.z); + } + } +} |