- Home /
Rigidbody will not rotate correctly
I can't get my spider-shaped rigidbody game object to rotate correctly. To test out the Rigidbody capabilities, I've given a capsule a basic movement function.
void Move(Vector3 position) { previousPosition = transform.position; Vector3 direction = position - transform.position; direction.y = 0; if (direction.magnitude < 0.2F) { if (num == (waypoints.Length - 1)) num = 0; else num++; return; }
// Rotate towards the target
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), 1 * Time.deltaTime);
rigidbody.AddRelativeForce(transform.forward, ForceMode.VelocityChange);
}
This capsule is supposed to follow a series of waypoints, but it's going in the wrong direction and off the expected path completely. To be more specific, the capsule turns is some odd direction, and then continues to move in that direction and never changes its direction. I really hope someone will want to help me. I know the physics in Unity can be quite complex, but it's also widely used - so hopefully there is someone who has had this problem before.
Answer by Owen-Reynolds · Apr 02, 2011 at 05:48 PM
When you get to a path node, you are updating the index, but not the the position:
if (direction.magnitude < 0.2F)
{
if (num == (waypoints.Length - 1)) num = 0;
else num++;
position = waypoints[num]; // <-- change target position ADD ME
// assuming Vector3[] waypoints;
return;
}
But, the missing dest-update should cause it to swing in a big circle back to that first destination. You say it's not doing that, so something else must also be jinked. I'd try testing with the rotation "snapped" to the final: transform.rotation = Quaternion.LookRotation(direction);
Answer by uni · Aug 20, 2010 at 11:38 AM
If you want to move the object in the direction it's facing move it along it's local z-axis. I would comment out the speed modifier for now and keep the code as simple as possible till u get this part working right. seems like a bit of excess code in here that u may not need. If your spider is on a flat surface then Slerp should be ok, otherwise u might want to raycast for the normal that it's sitting on. I'm new to this too so I'm just throwing in anything that can help.
There's already a command that moves it along it's z-axis (Vector3.forward). That's what Vector3 forward = transform.TransformDirection(Vector3.forward); is for.
Ah, ok. I've edited my question, stripped away the basics and added what I think is the core functionality. I'm also using a capsule now, a basic shape.
@cyngamer: actually, Unity already provides convenience variables for transform directions. So Vector3.forward is always (0/0/1), while transform.forward is always the local +Z of that transform.
Your answer
![](https://koobas.hobune.stream/wayback/20220613071701im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Player character X rotation going haywire on game start 1 Answer
Rotating one axis using Mathf.Lerp 1 Answer
Sphere vs Capsule collider collision resolution 0 Answers
C# Rotate velocity issue 1 Answer
Move and rotate Rigibody 0 Answers