- Home /
 
I cant seem to add a cooldown to this script
Hello fellow gamemakers at unity, I am not the best programmer, and I have spent an entire month trying to add a cooldown/stamina meter to this fps movement script I found but whenever I try, I always get errors or the code doesn't really do add any cooldown. I could really use some help here.
 var walkSpeed: float = 7; // regular speed
 var crchSpeed: float = 3; // crouching speed
 var runSpeed: float = 20; // 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;
 }
 if (Input.GetKey("c")){ // press C to crouch
 h = 0.4 * 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
 }
 
              There is no attempt here at cooldown or a sta$$anonymous$$a meter that I can see. Exactly what do you want to happen?
I have tried adding a sta$$anonymous$$a and maxsta$$anonymous$$a variable (var sta$$anonymous$$a int; and var maxsta$$anonymous$$a float; to the script and put in the update function after speed = runspeed; I put in the line below sta$$anonymous$$a = (sta$$anonymous$$a - Time.deltaTime). The I put an if statement saying- if(sta$$anonymous$$a < 0) { speed = crchspeed; yield 5.0f; sta$$anonymous$$a = maxsta$$anonymous$$a; speed = walkspeed; } this is what I have tried, sorry if it wasn't in the script I showed you, when I couldn't fix errors or get anything to work, I just undoed everything.
yes, it looks good, but i think the syntax is wrong, I put it into unity and the console errors include- BCE0005: $$anonymous$$ identifier: 'speed'. BCE0017: The best overload for the method 'UnityEngine.$$anonymous$$onoBehaviour.Invoke(String, float)' is not compatible with the argument list '(float, String)'. BCE0067: There is already a local variable with the name 'speed'.
Answer by robertbu · Mar 27, 2013 at 03:46 PM
Here is some modifications to your code. I'm away from my desk, so I did not paste it into mono to veryify that I did not make any syntax mistakes. But the logic is roughed in. I'm using Invoke() to restore the stamina.
  var walkSpeed: float = 7; // regular speed
     var crchSpeed: float = 3; // crouching speed
     var runSpeed: float = 20; // run speed
     var maxStamina: float = 5.0; // Seconds of running
      
     private var chMotor: CharacterMotor;
     private var ch: CharacterController;
     private var tr: Transform;
     private var height: float; // initial height
     private var canRun = true;
     private var stamina;
     
      
     function Start(){
     chMotor = GetComponent(CharacterMotor);
     tr = transform;
     ch = GetComponent(CharacterController);
     height = ch.height;
     stamina = maxStamina;
     }
      
     function Update(){
     
      
     var h = height;
     var speed = walkSpeed;
 
    if (Mathf.Approximately(speed, runSpeed)) {
         stamina -= Time.deltaTime;
         if (stamina < 0.0) {
             speed = walkSpeed;
             canRun = false;
             Invoke("RestoreStamina", 0.5);
         }
     }
     
  
     if (canRun && ch.isGrounded && Input.GetKey("left shift") || Input.GetKey("right shift")){
     speed = runSpeed;
     }
     if (Input.GetKey("c")){ // press C to crouch
     h = 0.4 * 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 RestoreStamina() {
         canRun = true;
         stamina = maxStamina;
     }
 
              Your answer
 
             Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Mobile Character controller Moving in world space 1 Answer
Moving a Simple Ball [Main Player!] inside a tunnel without gravity! 1 Answer
Why does the player keep pointing in a specific direction after moving? 0 Answers
Move Object a direction with one button and move the object back with the same button? 1 Answer