- 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