I have a game in which the character can only move horizontally and vertically, not diagonally.
I have tried to implement this with this code, which should check if the player is pressing down/up or left/right:
if (Input.GetKey("down"))
{
moveHor = false;
moveVer = true;
if(moveVer == true)
{
transform.Translate(Vector3.down * Time.deltaTime * speed);
}
}
if (Input.GetKey("up"))
{
moveHor = false;
moveVer = true;
if (moveVer == true)
{
transform.Translate(Vector3.up * Time.deltaTime * speed);
}
}
if (Input.GetKey("right"))
{
moveVer = false;
moveHor = true;
if(moveHor == true)
{
transform.Translate(Vector3.right * Time.deltaTime * speed);
}
}
if (Input.GetKey("left"))
{
moveVer = false;
moveHor = true;
if (moveHor == true)
{
transform.Translate(Vector3.left * Time.deltaTime * speed);
}
}
This code is ran in the Update() method.
The thing is, it’s not working and I can’t figure out why.
I hope someone knows what to do.
>Solution :
Try to use else-if to translate only in one direction per update cycle.
I’ve also removed nested if statements from your code, which were redundant and unneeded.
if (Input.GetKey("down"))
{
moveHor = false;
moveVer = true;
transform.Translate(Vector3.down * Time.deltaTime * speed);
}
else if (Input.GetKey("up"))
{
moveHor = false;
moveVer = true;
transform.Translate(Vector3.up * Time.deltaTime * speed);
}
else if (Input.GetKey("right"))
{
moveVer = false;
moveHor = true;
transform.Translate(Vector3.right * Time.deltaTime * speed);
}
else if (Input.GetKey("left"))
{
moveVer = false;
moveHor = true;
transform.Translate(Vector3.left * Time.deltaTime * speed);
}