using System.Collections.Generic; using UnityEngine; public class FirstPersonMovement : MonoBehaviour { public float speed = 5; [Header("Running")] public bool canRun = true; public bool IsRunning { get; private set; } public float runSpeed = 9; public KeyCode runningKey = KeyCode.LeftShift; Rigidbody rigidbody; /// Functions to override movement speed. Will use the last added override. public List> speedOverrides = new List>(); void Awake() { // Get the rigidbody on this. rigidbody = GetComponent(); } void FixedUpdate() { // Update IsRunning from input. IsRunning = canRun && Input.GetKey(runningKey); // Get targetMovingSpeed. float targetMovingSpeed = IsRunning ? runSpeed : speed; if (speedOverrides.Count > 0) { targetMovingSpeed = speedOverrides[speedOverrides.Count - 1](); } // Get targetVelocity from input. Vector2 targetVelocity =new Vector2( Input.GetAxis("Horizontal") * targetMovingSpeed, Input.GetAxis("Vertical") * targetMovingSpeed); // Apply movement. rigidbody.velocity = transform.rotation * new Vector3(targetVelocity.x, rigidbody.velocity.y, targetVelocity.y); } }