Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

FirstPersonController.cs 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using UnityEngine;
  2. using Cursor = UnityEngine.Cursor;
  3. [RequireComponent(typeof(CharacterController))]
  4. public class FirstPersonController : MonoBehaviour
  5. {
  6. [SerializeField]
  7. private float m_MouseSensitivity = 100f;
  8. [SerializeField]
  9. private float m_MovementSpeed = 5f;
  10. [SerializeField]
  11. private Transform m_PlayerCamera = null;
  12. [SerializeField]
  13. private bool m_MoveWithMouse = true;
  14. private CharacterController m_CharacterController;
  15. private float m_XRotation = 0f;
  16. [SerializeField]
  17. private byte m_ButtonMovementFlags;
  18. void Start()
  19. {
  20. #if ENABLE_INPUT_SYSTEM
  21. Debug.Log("The FirstPersonController uses the legacy input system. Please set it in Project Settings");
  22. m_MoveWithMouse = false;
  23. #endif
  24. if (m_MoveWithMouse)
  25. {
  26. Cursor.lockState = CursorLockMode.Locked;
  27. }
  28. m_CharacterController = GetComponent<CharacterController>();
  29. }
  30. void Update()
  31. {
  32. Look();
  33. Move();
  34. }
  35. private void Look()
  36. {
  37. Vector2 lookInput = GetLookInput();
  38. m_XRotation -= lookInput.y;
  39. m_XRotation = Mathf.Clamp(m_XRotation, -90f, 90f);
  40. m_PlayerCamera.localRotation = Quaternion.Euler(m_XRotation, 0, 0);
  41. transform.Rotate(Vector3.up * lookInput.x, Space.World);
  42. }
  43. private void Move()
  44. {
  45. Vector3 movementInput = GetMovementInput();
  46. Vector3 move = transform.right * movementInput.x + transform.forward * movementInput.z;
  47. m_CharacterController.Move(move * m_MovementSpeed * Time.deltaTime);
  48. }
  49. private Vector2 GetLookInput()
  50. {
  51. float mouseX = 0;
  52. float mouseY = 0;
  53. if (m_MoveWithMouse)
  54. {
  55. mouseX = Input.GetAxis("Mouse X") * m_MouseSensitivity * Time.deltaTime;
  56. mouseY = Input.GetAxis("Mouse Y") * m_MouseSensitivity * Time.deltaTime;
  57. }
  58. return new Vector2(mouseX, mouseY);
  59. }
  60. private Vector3 GetMovementInput()
  61. {
  62. float x = 0;
  63. float z = 0;
  64. if (m_MoveWithMouse)
  65. {
  66. x = Input.GetAxis("Horizontal");
  67. z = Input.GetAxis("Vertical");
  68. }
  69. return new Vector3(x, 0, z);
  70. }
  71. }