Sprint for a amount of time

Hello i have a question. (I’m new to unity…) Can I make a sprint script that changes the speed back to normal after a specific amount of time and the player has to wait another amount of time, until he can run again?

I use the default CharacterMotor script and the following one i got from the internet:

var walkSpeed: float = 7; // regular speed

var crchSpeed: float = 3; // crouching speed

var runSpeed: float = 24; // run speed



private var chMotor: CharacterMotor;

private var ch: CharacterController;

private var tr: Transform;

private var height: float; // initial height



function Start(){

    chMotor = GetComponent(CharacterMotor);

    tr = transform;

    ch = GetComponent(CharacterController);

 height = ch.height;

}



function Update(){



    var h = height;

    var speed = walkSpeed;

    

    if (ch.isGrounded && Input.GetKey("left shift") || Input.GetKey("right shift")){

        speed = runSpeed;
        runmode();

    }
    
   
     
        

    if (Input.GetKey("c")){ // press C to crouch

        h = 0.5 * height;

        speed = crchSpeed; // slow down when crouching

    }

    chMotor.movement.maxForwardSpeed = speed; // set max speed

    var lastHeight = ch.height; // crouch/stand up smoothly 

    ch.height = Mathf.Lerp(ch.height, h, 5*Time.deltaTime);

    tr.position.y += (ch.height-lastHeight)/2; // fix vertical position

}

function runmode (runTime : float) {
var timer = 2.0;
    while (timer < runTime) {
       speed = runSpeed;
       timer += Time.deltaTime;
       yield;
    }
}

Please help me. :smiley:

You can mark the start of the run when the event key_down is called and compare it to the end of your running by using Time.time. See this tutorial for the phases of a button press: http://unity3d.com/learn/tutorials/modules/beginner/scripting/get-button-and-get-key

float run_start;
bool running = false;
float seconds_can_run = 10.0f;

function Update(){
...
//Mark the time only when the button is initially pushed
if(!running && Input.GetKeyDown("left shift")){ 
  run_start = Time.time;
  running = true;
}

//Cancel running if the key is let go or the allowed time has ellapsed
if(running && (Input.GetKeyUp("left shift") || (run_start + seconds_can_run > Time.time)){
  running = false;
}

if (ch.isGrounded && running){
...
}

make a variable like tireness and add Time.deltaTime * tirenessModifier to it. And do an if statement for running like only run when tireness < 10. Hope that helps :slight_smile: