CharacterMovementNoCamera.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using Cinemachine.Examples;
  2. using UnityEngine;
  3. // WASD to move, Space to sprint
  4. public class CharacterMovementNoCamera : MonoBehaviour
  5. {
  6. public Transform InvisibleCameraOrigin;
  7. public float StrafeSpeed = 0.1f;
  8. public float TurnSpeed = 3;
  9. public float Damping = 0.2f;
  10. public float VerticalRotMin = -80;
  11. public float VerticalRotMax = 80;
  12. public KeyCode sprintJoystick = KeyCode.JoystickButton2;
  13. public KeyCode sprintKeyboard = KeyCode.Space;
  14. private bool isSprinting;
  15. private Animator anim;
  16. private float currentStrafeSpeed;
  17. private Vector2 currentVelocity;
  18. void OnEnable()
  19. {
  20. anim = GetComponent<Animator>();
  21. currentVelocity = Vector2.zero;
  22. currentStrafeSpeed = 0;
  23. isSprinting = false;
  24. }
  25. void FixedUpdate()
  26. {
  27. #if ENABLE_LEGACY_INPUT_MANAGER
  28. var input = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
  29. var speed = input.y;
  30. speed = Mathf.Clamp(speed, -1f, 1f);
  31. speed = Mathf.SmoothDamp(anim.GetFloat("Speed"), speed, ref currentVelocity.y, Damping);
  32. anim.SetFloat("Speed", speed);
  33. anim.SetFloat("Direction", speed);
  34. // set sprinting
  35. isSprinting = (Input.GetKey(sprintJoystick) || Input.GetKey(sprintKeyboard)) && speed > 0;
  36. anim.SetBool("isSprinting", isSprinting);
  37. // strafing
  38. currentStrafeSpeed = Mathf.SmoothDamp(
  39. currentStrafeSpeed, input.x * StrafeSpeed, ref currentVelocity.x, Damping);
  40. transform.position += transform.TransformDirection(Vector3.right) * currentStrafeSpeed;
  41. var rotInput = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
  42. var rot = transform.eulerAngles;
  43. rot.y += rotInput.x * TurnSpeed;
  44. transform.rotation = Quaternion.Euler(rot);
  45. if (InvisibleCameraOrigin != null)
  46. {
  47. rot = InvisibleCameraOrigin.localRotation.eulerAngles;
  48. rot.x -= rotInput.y * TurnSpeed;
  49. if (rot.x > 180)
  50. rot.x -= 360;
  51. rot.x = Mathf.Clamp(rot.x, VerticalRotMin, VerticalRotMax);
  52. InvisibleCameraOrigin.localRotation = Quaternion.Euler(rot);
  53. }
  54. #else
  55. InputSystemHelper.EnableBackendsWarningMessage();
  56. #endif
  57. }
  58. }