- Home /
simple rotation question c# local/world
Hi!
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!
Answer by NGKrush1 · Apr 22, 2013 at 08:18 PM
the solution is to use: transform.Rotate(0,90,0);
thanks to robertbu for the push in the right direction!
Answer by robertbu · Apr 22, 2013 at 05:00 PM
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().
transform.Rotate(Vector3(0,-90,0));
entering your solution, i got some errors, but changing that to:
transform.Rotate(0,90,0); solved the problem. thanks a lot!
A new problem has occured now, as the raycast seems to see the wall in front twice, resulting in 2*90 = 180 degree turn. doing a quick n dirty change by setting it to 45degrees actually ends up in the ray seeing the wall 4 times leading to the same 180 degree turn. any idea how I can solve this?
Your answer
Follow this Question
Related Questions
Flip over an object (smooth transition) 3 Answers
World and Local Axis out of Alignment 1 Answer
Rotation and Translation children parent and tween 0 Answers
Distribute terrain in zones 3 Answers
Apply a Rotation in World Space based on Quaternions 2 Answers