so i just finished making my sprinting/energy bar class (javascript)
this is it so far
#pragma strict
import UnityEngine.UI;
var energy : Image;
var playerEnergy : float;
var maxEnergy : float = 1;
private var chMotor : CharacterMotor;
private var controller : CharacterController;
function Start () {
chMotor = GetComponent(CharacterMotor);
controller = GetComponent(CharacterController);
playerEnergy = maxEnergy;
}
function Update () {
if(controller.velocity.magnitude > 0 && Input.GetKey(KeyCode.LeftShift))
{
chMotor.movement.maxForwardSpeed = 10;
chMotor.movement.maxSidewaysSpeed = 10;
playerEnergy -= Time.deltaTime / 3000;
}
else
{
chMotor.movement.maxForwardSpeed = 6;
chMotor.movement.maxSidewaysSpeed = 6;
}
if(playerEnergy > maxEnergy)
{
playerEnergy = maxEnergy;
}
if(playerEnergy < 0)
{
playerEnergy = 0;
}
energy.fillAmount = playerEnergy;
}
now im not sure how to make a sprint cooldown, im fairly new to coding overall and im really stuck with this. I tried using yield waitforseconds but im not sure how to use it, any ideas?
Maybe something like this? Sure there is a better way, but this is a start
#pragma strict
import UnityEngine.UI;
var energy : Image;
var playerEnergy : float;
var maxEnergy : float = 1;
var canSprintTrigger : boolean = true;
private var chMotor : CharacterMotor;
private var controller : CharacterController;
function Start () {
chMotor = GetComponent(CharacterMotor);
controller = GetComponent(CharacterController);
playerEnergy = maxEnergy;
}
function Update () {
if(controller.velocity.magnitude > 0 && Input.GetKey(KeyCode.LeftShift) && canSprintTrigger == true)
{
chMotor.movement.maxForwardSpeed = 10;
chMotor.movement.maxSidewaysSpeed = 10;
playerEnergy -= Time.deltaTime / 3000;
canRun();
}
else
{
chMotor.movement.maxForwardSpeed = 6;
chMotor.movement.maxSidewaysSpeed = 6;
}
if(playerEnergy > maxEnergy)
{
playerEnergy = maxEnergy;
}
if(playerEnergy < 0)
{
playerEnergy = 0;
}
energy.fillAmount = playerEnergy;
}
function canRun()
{
yield WaitForSeconds(10); //you'll need to play around with how long someone can sprint for before it's set to false. Then again how long you wait until it's set to true again
canSprintTrigger = false;
yield WaitForSeconds(10);
canSprintTrigger = true;
}
Is it something like this you’re looking for?:
#pragma strict
import UnityEngine.UI;
var energy : Image;
var playerEnergy : float;
var maxEnergy : float = 1;
var CanSprint = true;
private var chMotor : CharacterMotor;
private var controller : CharacterController;
function Start () {
chMotor = GetComponent(CharacterMotor);
controller = GetComponent(CharacterController);
playerEnergy = maxEnergy;
}
function SprintTimer(){
yield WaitForSeconds(1);
CanSprint = true;
}
function Update () {
if(Input.GetKeyUp(KeyCode.LeftShift)&&CanSprint==true)
{
CanSprint=false;
SprintTimer();
}
if(controller.velocity.magnitude > 0 && Input.GetKey(KeyCode.LeftShift))
{
if(CanSprint==true){
chMotor.movement.maxForwardSpeed = 10;
chMotor.movement.maxSidewaysSpeed = 10;
playerEnergy -= Time.deltaTime / 3000;
}else{
chMotor.movement.maxForwardSpeed = 6;
chMotor.movement.maxSidewaysSpeed = 6;
}
}
else
{
chMotor.movement.maxForwardSpeed = 6;
chMotor.movement.maxSidewaysSpeed = 6;
}
if(playerEnergy > maxEnergy)
{
playerEnergy = maxEnergy;
}
if(playerEnergy < 0)
{
playerEnergy = 0;
}
energy.fillAmount = playerEnergy;
}