simple rotation question c# local/world


I’m trying to make a simple pac-man style game where a character(automatically) moves through a maze.
I’m trying to get the player to rotate 90degrees if he hits a wall. I’m using raycasts to check if he is colliding with a wall, but can’t get the player to rotate after the first time.

I’m guessing it’s got something to do with local vs world rotation, but i don’t know how to access it in my code.

if (Physics.Raycast(transform.position, hitF, 1))
				Debug.Log("cannot move forward");
				//...but no wall to the left.
				if (!Physics.Raycast(transform.position, hitL, 1))
					Debug.Log("rotate left");
					transform.rotation = Quaternion.Euler (0,-90,0);
				else //there is a wall left...
					//but no wall to the right.
					if (!Physics.Raycast(transform.position, hitR, 1))
						//Debug.Log("rotate right");
						//rotate right:						transform.rotation = Quaternion.Euler (0,90,0);
					else //there is  wall in front, left and right of him.
						//broadcast "gameover"
			//move player x pixels forward on local axis.
			transform.Translate(Vector3.right * Time.deltaTime, Space.Self);

before the code I’ve initialised these vars:

	hitF = transform.position;
	hitL = transform.position;
	hitR = transform.position;		
	hitF.x = hitF.x + 1;
	hitL.z = hitL.z + 1;
	hitR.z = hitR.z - 1;

thanks for your time!

This is not a local vs global issue. Quaternion.Euler creates an absolute rotation, not a relative rotation. So after the first time, you are setting the rotation to the same value. Try using Transform.Rotate().


the solution is to use: transform.Rotate(0,90,0);

thanks to robertbu for the push in the right direction!