- Home /
Rotating a object towards a direction then move it
Hi normally just searching the forums / unity docs or googling around can solve my programming issues but i've been stuck for about the last month and i'm on the fourth attempt at making a basic tank controller with each attempt i'm getting closer and closer but right now I am just stuck.
My problem isn't with moving it but making it rotate towards the direction the player whats to travel then moving. I provided two videos to show what im trying to accomplish
What I want http://youtu.be/9zrxS0LcnRo
What I currently have http://youtu.be/8FSPA7863-c
Currently it rotates but doesn't stop when it faces forward and so and endless rotation occurs until you stop pressing forward
public class attempt4 : MonoBehaviour
{
Quaternion qtarget; //quartnon target ie rotation
public Transform waypoint; //the cube in front of the tank
public Transform Turrent_pos; //the top turrent of the tank
public float rspeed = 10; //turn speed of tank
public float speed = 8; //forward speed
public bool tankBody = false;
void LateUpdate()
{
//Quaternion deltaRotation = Quaternion.Euler(waypoint.transform.position-transform.position);
//rigidbody.MoveRotation(Quaternion.Slerp(rigidbody.rotation, deltaRotation, rspeed * Time.deltaTime));
qtarget = Quaternion.LookRotation(waypoint.transform.position-transform.position); //non ridgid body quatornon
// based on input, determine requested action
if (Input.GetAxis("Vertical") > 0)
{
// requesting forward
transform.rotation = Quaternion.Slerp(transform.rotation, qtarget, rspeed * Time.deltaTime); //this rotates the object towards the waypoint(direction camera is facing)
transform.position+= (transform.TransformDirection(Vector3.forward) * speed * Time.deltaTime); //this rotates the object to the direction we need to travel multiply by speed, progressed by time
}
else if (Input.GetAxis("Vertical") < 0)
{
// requesting reverse
transform.rotation = Quaternion.Slerp(transform.rotation, qtarget, rspeed * Time.deltaTime);
transform.position-= (transform.TransformDirection(Vector3.forward) * speed * Time.deltaTime);
}
}
}
Is there anyway i could make it wait until the tank is relatively facing forward and then allow it to move?
try setting some condition like
var turretIsRotating : boolean;
//then something like
if(turretIsRotating) {
//your code here
}else{
}
using boolean can help you a lot in tricky situations.
Thanks for the help, I got it working I used rotatetowards ins$$anonymous$$d of LookAt which is a close secound in combination with the booleans
Your answer
![](https://koobas.hobune.stream/wayback/20220613134457im_/https://answers.unity.com/themes/thub/images/avi.jpg)