- 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