Movement inverts when changing direction

Hello!

Having an annoying issue when moving my player around a scene. When facing right the up and down buttons work as they should, but when I face left the up and down buttons are inverted.

	void movement ()
	
	{

		position = transform.TransformDirection(Vector3.right)*speed;

		if(Input.GetKey(KeyCode.LeftArrow))
		{
			transform.eulerAngles = new Vector3(0,180);
			FacingRight= false;
			{
				controller.Move(position * Time.deltaTime);
			}
		}
		if (Input.GetKey (KeyCode.RightArrow)) 
		{
			transform.eulerAngles = new Vector3 (0,0);
			FacingRight = true;
			{
				controller.Move (position * Time.deltaTime);
			}
		}
		if (Input.GetKey (KeyCode.DownArrow))
		{
			controller.Move(-transform.forward * speed * Time.deltaTime);

		}
		if (Input.GetKey (KeyCode.UpArrow)) 
		{
			controller.Move(transform.forward * speed * Time.deltaTime);

		}
	}

I tried using transform.Translate instead of controller.Move for the up and down arrows. While it did move correctly, It caused the player to move through objects/ colliders didn’t interact with the object.

Any help would be greatly appreciated

1 Answer

1

Is this 2D or 3D? Because with this code you limit your movement to one axis. Try this for 3D movement on a plane:

     void movement ()
     
     {
         float turnspeed = 30.0f; //play with this value
         
         if(Input.GetKey(KeyCode.LeftArrow))
         {
             FacingRight = false;
             transform.rotation *= Quaternion.AngleAxis(turnspeed*Time.deltaTime,Vector3.up);
         }
         if (Input.GetKey (KeyCode.RightArrow)) 
         {
             FacingRight = true;
             transform.rotation *= Quaternion.AngleAxis(-turnspeed*Time.deltaTime,Vector3.up);
         }
         if (Input.GetKey (KeyCode.DownArrow))
         {
             controller.Move(-transform.forward * speed * Time.deltaTime);
 
         }
         if (Input.GetKey (KeyCode.UpArrow)) 
         {
             controller.Move(transform.forward * speed * Time.deltaTime);
 
         }
     }

If left and right are wrong, swap the minus from the turnspeed.

Sorry about the confusion, It is in 3d but what I'm going for is Castle crashers/Scott pilgrim 2d sort of movement. So the player will either be facing right of left; and moving left, right, toward, and away from the camera.