- Home /
Unexpected behavior on Vector3.moveTowards for Player
I am trying to get a sort of "dash" into my 2,5D Sidescroller. Therefor I am using code that stretches over two scripts, one part is inside my Player-script, the other inside a script I have for choosing the proper animation.
In my script to choose the animation I have:
Player pstats = Player.GetComponent<Player>();
float dashing = 0.0f;
if (Input.GetAxis ("Dash") > 0)
{
Debug.Log ("DashTest");
Debug.Log ("DashUsable=" + pstats.dashUsable);
if (pstats.dashUsable)
{
pstats.DashSkill();
Debug.Log ("preDashAnim");
dashing = 1.0f;
}
else
{
Debug.Log ("DashFail");
dashing = 0.0f;
}
}
anim.SetFloat ("Dashing", dashing*dashing);
Inside my Update Method.
In my Player script I have
public bool dashUsable = true;
public bool dashUsing = false;
public bool attacking = false;
private IEnumerator WaitForNextDash() {
yield return new WaitForSeconds(0.2f);
dashUsable = true;
Debug.Log("WaitForNextDash Done");
}
private IEnumerator WaitForDashToEnd() {
yield return new WaitForSeconds(0.5f);
Debug.Log ("dashUsable being changed");
dashUsable = false;
dashUsing = false;
attacking = false;
controller.enabled = true;
StartCoroutine (WaitForNextDash ());
Debug.Log("WaitForDashToEnd Done");
}
public void DashSkill()
{
attacking = true;
dashUsing = true;
controller.enabled = false;
Debug.Log ("DashSkill in use");
if (Input.GetAxisRaw ("Vertical") < 0.0f)
{
transform.position = Vector3.MoveTowards (transform.position, Vector3.right * -100f, 8 * Time.deltaTime);
}
if (Input.GetAxisRaw ("Vertical") > 0.0f)
{
transform.position = Vector3.MoveTowards (transform.position, Vector3.right * 100f, 8 * Time.deltaTime);
}
StartCoroutine (WaitForDashToEnd ());
}
(Sorry for the big Codeblocks xD)
Well, the idea was: When the key for Dash is pressed (spacebar), the script for the animation checks if the dash is usable (boolean dashUsable) and if yes, it sets the animation and starts the DashSkill Method of the Player-script (pstats).
If not, it is just supposed to not set the dash.
If the Dash is executed, it is supposed to move the player by a fixed distance (Vector3.MoveTowards), start a coroutine for the duration so that the player can't move during the dash and then start another coroutine for the cooldown of the dash.
My Issue now is that instead of moving the Player when I only press the dash-button, the player only goes in the animation and gets "stunned" for a tiny moment. Though he doesn't move forward on the x-axis as planned.
What am I doing wrong?
ps: I also had an issue where my dashUsable was allways false, though I realized, that was due to it not having updated to true in the inspector.
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
fixed distance for Vector3.moveTowards ? 1 Answer
3 coroutines to ease in lerp, MoveToward steady pace, and ease out lerp 0 Answers
Error Vector3 does not contain MoveTowards 3 Answers
MoveTowards is not working with RectTransform component 0 Answers