x


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

more ▼

asked Dec 20 '11 at 11:27 PM

jt78 gravatar image

jt78
18 4 5 8

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

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.

more ▼

answered Dec 21 '11 at 06:30 AM

Owen Reynolds gravatar image

Owen Reynolds
11.3k 1 7 45

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x2166
x1791
x238
x60
x23

asked: Dec 20 '11 at 11:27 PM

Seen: 788 times

Last Updated: Dec 21 '11 at 06:30 AM