using UnityEngine;
public class Controller : MonoBehaviour
{
public Rigidbody rb;
public float movementForce = 10f;
public float jukeForce = 20f;
public float maxSpeed = 5f;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
Vector2 input = GetInputs();
ApplyMovement(input);
Juke(GetJukeDirection());
}
void ApplyMovement(Vector2 input)
{
Vector3 force = new Vector3(input.x, 0, input.y) * movementForce;
float projectedSpeed = rb.velocity.magnitude + force.magnitude / rb.mass;
// Scale force if needed to prevent exceeding maxSpeed
if (projectedSpeed < maxSpeed)
{
rb.AddForce(force, ForceMode.Force);
}
else
{
float scale = (maxSpeed - rb.velocity.magnitude) / (force.magnitude / rb.mass);
rb.AddForce(force * scale, ForceMode.Force);
}
}
void Juke(Vector3 direction)
{
rb.AddForce(direction * jukeForce, ForceMode.Impulse);
}
Vector2 GetInputs()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
return new Vector2(horizontal, vertical);
}