- Home /
Can't seem to get dash cooldown working...
This is a simple bit of dash code and after trying to get it working I have been wondering how to get a 6 second or so cool down in between each dash so I can't spam it. Thank you in advance!
public const float maxDashTime = 1.0f;
public float dashDistance = 10;
public float dashStoppingSpeed = 0.1f;
float currentDashTime = maxDashTime;
float dashSpeed = 6;
CharacterController controller;
private void Awake()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
{
if (Input.GetButtonDown("Dash"))
{
currentDashTime = 0;
}
if (currentDashTime < maxDashTime)
{
moveDirection = transform.forward * dashDistance;
currentDashTime += dashStoppingSpeed;
}
else
{
moveDirection = Vector3.zero;
}
controller.Move(moveDirection * Time.deltaTime * dashSpeed);
}
}
}
Answer by DarkSapra · Jul 13, 2019 at 11:31 PM
What I can see here is that you are reseting the dash time at every click. Also, you are not really using time, here but a number that could change over time. I can't really try the code, but here is what I would recommend:
public const float maxDashTime = 6.0f;
public float dashDistance = 10;
public bool dash;
float currentDashTime;
float dashSpeed = 6;
CharacterController controller;
private void Awake()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
if (Input.GetButtonDown("Dash") && !dash)
{
moveDirection = transform.forward * dashDistance;
controller.Move(moveDirection * Time.deltaTime * dashSpeed);
currentDashTime = 0;
dash = true;
}
}
void FixedUpdate()
{
if (currentDashTime < maxDashTime && dash)
{
currentDashTime += Time.deltaTime;
}
else
{
moveDirection = Vector3.zero;
dash = false;
}
}
}
However, since I don't really know how your controller.Move works, i don't want to give you something not useful. But, moveDirection doesn't need to be called every time, and neither i know why you are seeting time.deltatime and dash speed inside the move function. Changing that, it would look like this:
public const float maxDashTime = 6.0f;
public float dashDistance = 10;
public bool dash;
float currentDashTime;
CharacterController controller;
private void Awake()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
if (Input.GetButtonDown("Dash") && !dash)
{
controller.Move(transform.forward * dashDistance);
currentDashTime = 0;
dash = true;
}
}
void FixedUpdate()
{
if (currentDashTime < maxDashTime && dash)
{
currentDashTime += Time.deltaTime;
}
else
{
dash = false;
}
}
I hope that I can help!