- Home /
Kinematic vs. non-kinematic movement over a curve
I'm trying to get a Rigidbody2D to move cleanly over a curve with a rotation that is perpendicular to the collider below it (the concept being similar to that of someone entering a halfpipe via a helicopter). Essentially, each frame I am using a Physics2D.Raycast() downward from the player's transform and then using the resulting normal to adjust the player's rotation. I have something that is somewhat functional, but does not seem efficient or reliable:
if (hit.collider != null)
{
Quaternion rotation = Quaternion.LookRotation(hit.normal, transform.TransformDirection(Vector3.back));
transform.rotation = Quaternion.Slerp(transform.rotation, new Quaternion(0, 0, rotation.z, rotation.w), speed * Time.deltaTime);
}
Using that, I am able to rotate the player's transform to be perpendicular to the ground, although I need to determine what the max speed should be as to prevent the Slerp from appearing jagged due to strange normals.
However, moving the player's position through the halfpipe is where I am having trouble. If I make the player kinematic and lerp forward (with respect to the player's transform), the player slowly falls into the halfpipe rather than staying on top of it (as though he were slowly melting into it). Conversely, if the rigidbody2D is not kinematic and I use a Physics2D material to make the player and the halfpipe smooth (friction and bounciness = 0), and apply a circle collider to the player object, there is still some noticeable slowdown in the object's velocity. Using the non-kinematic method also means that I need to cancel the player's x movement upon leaving the halfpipe so that they are only moving in the y direction, lest they miss the halfpipe on reentry (I can do this, but it seems like inelegant methodology all around).
I also attempted to use a Bezier curve to guide the player object through the halfpipe, but that looks the worst of all and is the most resource intensive.
Your answer
Follow this Question
Related Questions
How to lerp a car while it's moving forward at a constant velocity 0 Answers
Kinematic rigidbody movement. 2 Answers
How to instantly accelerate a falling game object to the maximum fall speed? 2 Answers
Rigidbody2D.position and Rigidbody2D.MovePosition() 0 Answers
Rigidbody2D constraints checked for x and y but still moves when character jumps on it from distance 0 Answers