- Home /
Why am I only allowed to trigger my dash script once?
I have a player movement controller script and a dash script. The movement controller turns on the dash script whenever space is pressed but for some reason it only works once. It won't let me do it a second time. Can anyone tell me why?
Here's the movement controller:
#pragma strict
var originalMoveSpeed : float;
var moveSpeed : float;
var dashSpeed : float;
var clampRadius : float;
var walkSpeed : float;
var isDashing : boolean;
var rb2D : Rigidbody2D;
var movement : Vector2;
var playerObject : GameObject;
function Update () {
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
}
function FixedUpdate () {
//normalize movement
if (movement.magnitude > 1) {
movement = movement.normalized;
}
//move
rb2D.MovePosition(rb2D.position + movement * moveSpeed * Time.fixedDeltaTime);
movement = Vector3.ClampMagnitude(movement, clampRadius);
//dash
if(Input.GetKeyDown(KeyCode.Space) && playerObject.GetComponent(playerDash).enabled == false) {
playerObject.GetComponent(playerDash).enabled = true;
}
//walk
if(Input.GetKey(KeyCode.LeftShift) == true && !Input.GetKeyDown(KeyCode.Space) == true) {
moveSpeed = walkSpeed;
}
else {
moveSpeed = originalMoveSpeed;
}
}
Here's the dash script:
#pragma strict
var dashSpeed : float;
var dashTime : float;
var isDashing : boolean;
var playerObject : GameObject;
function Start () {
isDashing = true;
playerObject = GameObject.Find("player");
yield WaitForSeconds(dashTime);
isDashing = false;
}
function Update () {
if(isDashing == true) {
playerObject.GetComponent(playerMovement).moveSpeed = dashSpeed;
}
else {
playerObject.GetComponent(playerMovement).moveSpeed = playerObject.GetComponent(playerMovement).originalMoveSpeed;
playerObject.GetComponent(playerDash).enabled = false;
}
}
Answer by BrainUK · Jun 20, 2021 at 07:10 PM
Fixed it. Here's the working dash script:
#pragma strict
var dashSpeed : float;
var dashTime : float;
var isDashing : boolean;
var playerObject : GameObject;
function PlayerDash () {
isDashing = true;
playerObject = GameObject.Find("player");
yield WaitForSeconds(dashTime);
isDashing = false;
}
function OnEnable () {
PlayerDash();
}
function Update () {
if(isDashing == true) {
playerObject.GetComponent(playerMovement).moveSpeed = dashSpeed;
}
else {
playerObject.GetComponent(playerMovement).moveSpeed = playerObject.GetComponent(playerMovement).originalMoveSpeed;
playerObject.GetComponent(playerDash).enabled = false;
}
}
Answer by Nicoup · Jun 20, 2021 at 07:13 PM
It is triggered once because start method is called only once. Use OnEnable() instead.
Your answer
Follow this Question
Related Questions
Why does WASD move my player quicker than with a joystick? 1 Answer
How would I go about keeping my player object moving after a scene change? 3 Answers
Ball Rolling Forever 0 Answers
Help with player movement and adding force to a ball. 1 Answer
I need help with a CharacterMotor script error in Unity5. This is formatted in Javascript. 0 Answers