- Home /
Keep rotation at (0,0,0) while transforming?
I have a code that allows AI to wander which works perfectly in a 3D space but in a 2D space it does not. I've been trying to rewrite the code in order to work with 2D but I'm mostly having issues with the objects rotation. I know the issue is based around transform.LookAt(waypoint); but the code does not work without it. I've tried changing it but it causes the player to drift out on the z axis rather than wander on the y and x axis. Here is my code:
 using UnityEngine;
 using System.Collections;
 
 public class Wander : MonoBehaviour
 {
 
     // Use this for initialization
     public float speed = 10.0f;
     Vector3 wayPoint;
     float range = 3.0f;
     //var wayPoint : Vector3;
    // var Range = 10;
 
     void Start()
     {
         //initialise the target way point
         Wandering();
     }
 
     void Update()
     {
         // this is called every frame
         // do move code here
         transform.position += transform.forward * speed * Time.deltaTime;
         if ((transform.position - wayPoint).magnitude < 3)
         {
             // when the distance between us and the target is less than 3
             // create a new way point target
             Wandering();
 
 
         }
     }
 
     void Wandering()
     {
         // does nothing except pick a new destination to go to
 
         wayPoint = new Vector3(Random.Range(transform.position.x - range, transform.position.x + range), Random.Range(transform.position.y - range, transform.position.y + range), Random.Range(transform.position.z - range, transform.position.z + range));
         wayPoint.z = 1;
         // don't need to change direction every frame seeing as you walk in a straight line only
         transform.LookAt(wayPoint);
         transform.Rotate(0, 0, 0);
         Debug.Log(wayPoint + " and " + (transform.position - wayPoint).magnitude);
     }
 }
Answer by MakakWasTaken · Sep 27, 2015 at 06:37 PM
If you want the rotation of the object use this instead:
 transform.rotation = Quaternion.identity;
and why say
 transform.LookAt(wayPoint);
 transform.Rotate(0,0,0);
Why not just say:
 void Wandering()
      {
          // does nothing except pick a new destination to go to
  
          wayPoint = new Vector3(Random.Range(transform.position.x - range, transform.position.x + range), Random.Range(transform.position.y - range, transform.position.y + range), Random.Range(transform.position.z - range, transform.position.z + range));
          wayPoint.z = 1;
          // don't need to change direction every frame seeing as you walk in a straight line only
          transform.rotation = Quaternion.identity;
          Debug.Log(wayPoint + " and " + (transform.position - wayPoint).magnitude);
      }
If you want the rotation to be something else use it like this:
 transform.rotation = Quaternion.Euler(x,y,z);
 //OR
 transform.rotation = Quaternion.Euler(new Vector3(x,y,z));
When i use "transform.rotation = Quaternion.identity;" the object stops wandering all together and ins$$anonymous$$d moves backward on the z axis and nothing else.
That is because transform.forward is moving a object on the z axis, try doing something like this ins$$anonymous$$d:
 Vector3 v2forward = new Vector3(1, 0, 0);
 transform.position += v2forward * speed * Time.deltaTime;
Your answer
 
 
             Follow this Question
Related Questions
Flip over an object (smooth transition) 3 Answers
Start Coroutine after other has finished 4 Answers
2D Rotate Object With Clamp Gradually. (C#) 2 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                