You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
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;
|
|
/// <summary> Functions to override movement speed. Will use the last added override. </summary>
|
|
public List<System.Func<float>> speedOverrides = new List<System.Func<float>>();
|
|
|
|
|
|
|
|
void Awake()
|
|
{
|
|
// Get the rigidbody on this.
|
|
rigidbody = GetComponent<Rigidbody>();
|
|
}
|
|
|
|
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);
|
|
}
|
|
} |