FreeCameraController.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using UnityEngine;
  2. namespace VLB_Samples
  3. {
  4. public class FreeCameraController : MonoBehaviour
  5. {
  6. public float cameraSensitivity = 90;
  7. public float speedNormal = 10;
  8. public float speedFactorSlow = 0.25f;
  9. public float speedFactorFast = 3;
  10. public float speedClimb = 4;
  11. float rotationH = 0.0f;
  12. float rotationV = 0.0f;
  13. bool m_UseMouseView = true;
  14. bool useMouseView
  15. {
  16. get { return m_UseMouseView; }
  17. set
  18. {
  19. m_UseMouseView = value;
  20. Cursor.lockState = value ? CursorLockMode.Locked : CursorLockMode.None;
  21. Cursor.visible = !value;
  22. }
  23. }
  24. void Start()
  25. {
  26. useMouseView = true;
  27. var euler = transform.rotation.eulerAngles;
  28. rotationH = euler.y;
  29. rotationV = euler.x;
  30. if (rotationV > 180f)
  31. rotationV -= 360f;
  32. }
  33. void Update()
  34. {
  35. if (useMouseView)
  36. {
  37. rotationH += Input.GetAxis("Mouse X") * cameraSensitivity * Time.deltaTime;
  38. rotationV -= Input.GetAxis("Mouse Y") * cameraSensitivity * Time.deltaTime;
  39. }
  40. rotationV = Mathf.Clamp(rotationV, -90, 90);
  41. transform.rotation = Quaternion.AngleAxis(rotationH, Vector3.up);
  42. transform.rotation *= Quaternion.AngleAxis(rotationV, Vector3.right);
  43. var speed = speedNormal;
  44. if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) speed *= speedFactorFast;
  45. else if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) speed *= speedFactorSlow;
  46. transform.position += transform.forward * speed * Input.GetAxis("Vertical") * Time.deltaTime;
  47. transform.position += transform.right * speed * Input.GetAxis("Horizontal") * Time.deltaTime;
  48. if (Input.GetKey(KeyCode.Q)) { transform.position += Vector3.up * speedClimb * Time.deltaTime; }
  49. if (Input.GetKey(KeyCode.E)) { transform.position += Vector3.down * speedClimb * Time.deltaTime; }
  50. if (
  51. #if !UNITY_EDITOR
  52. Input.GetMouseButtonDown(0) ||
  53. #endif
  54. Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2))
  55. useMouseView = !useMouseView;
  56. if (Input.GetKeyDown(KeyCode.Escape))
  57. useMouseView = false;
  58. }
  59. }
  60. }