- Home /
Tank (Rigidbody) Pathfinding movement
Hi, I'm working on a RTS game and just implemented the A* pathfinding method into the game (I''m using the Javascript API) and the pathfinding itself works great. My problem is how to get the tank to move between waypoints.
Basically, every FixedUpdate I have:
var dir : Vector3 = (currentPath.vectorPath[currentWaypoint] - transform.position).normalized;
dir *= speed * Time.fixedDeltaTime;
transform.Translate(dir);
And I'm trying to workout how to turn that into Rigidbody code - the drive part is pretty easy and already working (moving forward/backwards) but I just need to know how to use AddTorque to make it turn towards the next waypoint in a realistic way.
Also, I have the mass, drag and drive force of the tank all worked out - any ideas what good values for the turning force (I know that's simplifying it but I don't mind as long as it's realistic) and angular drag?
Thanks! - James
Answer by Owen-Reynolds · Dec 21, 2011 at 06:30 AM
Physics-wise, AddTorque gives a push and lets momentum spin it. Seems to make more sense, for a tank, to turn at a constant speed and only go directly forwards. This is what I use for "tanks":
Quaternion wantFace = Quaternion.LookRotation(target - transform.position);
transform.rotation = Quaternion.RotateTowards(transform.rotation,
wantFace, 90 * Time.fixedDeltaTime);
// move towards destination at speed (but don't change fall speed):
Vector3 newVel = Vector3.zero;
// only move if we are close to correct angle:
if(Quaternion.Angle(transform.rotation, wantFace)<5) {
newVel = transform.forward * spd;
}
newVel.y = rigidbody.velocity.y // save gravity
rigidbody.velocity = newVel;
The 90 in rotateTowards is turn speed in degrees/second. The "if angle is close" makes it more robotic-looking. Could easily be a larger angle. For even more fun, go backwards if the angle is past 90 -- gives a cool backup then forwards move.
Also, transform.Translate
isn't using rigidbodies -- it's like dragging it in the Inspector. For rigidbody-based movement, you get to use AddForce, and set friction really high. Unless Godzilla is tossing your tanks around, rigidbodies don't seem to get you much.
Your answer
Follow this Question
Related Questions
AddTorque to rotate rigidbody to look at a point 3 Answers
how to rotate a Rigidbody to a target rotation using Rigidbody.AddTorque() 0 Answers
How to have a cube to fall on fixed rotation? 1 Answer
How to make a ball capable of rolling around a loop the loop? 1 Answer
Issue with Rotation behaviour of PID Controller when rotating to look at mouse position 0 Answers