- Home /
Question by
virtualproz · Mar 30, 2018 at 10:03 AM ·
rigidbody2dcar physicsdriving
Car Drift Effect in 2d Top view
i am not really good in physics, so i want to create drift or sliding effect in 2d car here is my code in image its my settings of rigid body2d
public class CarController : MonoBehaviour {
private Rigidbody2D rg;
public float acceleration=5;
public float steering;
// Use this for initialization
void Start () {
rg=GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void FixedUpdate () {
float h=-Input.GetAxis("Horizontal");
float v=Input.GetAxis("Vertical");
Vector2 speed=transform.up*(v*acceleration);
print(speed);
rg.AddForce(speed);
float direction=Vector2.Dot(rg.velocity,rg.GetRelativeVector(Vector2.up));
if(direction>=0.0f){
rg.rotation+=h*steering * (rg.velocity.magnitude/5.0f);
//rg.AddTorque((-h*steering) * (rg.velocity.magnitude/10.0f));
}
else{
rg.rotation-=h*steering * (rg.velocity.magnitude/5.0f);
// rg.AddTorque((-h*steering) * (rg.velocity.magnitude/10.0f)); }
Vector2 forward=new Vector2(0.0f,0.5f);
float steeringRightAngle;
if(rg.angularVelocity>0){
steeringRightAngle=-90;
}
else{
steeringRightAngle=90;
}
Vector2 rightAngleFromForward = Quaternion.AngleAxis(steeringRightAngle, Vector3.forward) * forward;
Debug.DrawLine((Vector3)rg.position, (Vector3)rg.GetRelativePoint(rightAngleFromForward), Color.green);
float driftForce = Vector2.Dot(rg.velocity, rg.GetRelativeVector(rightAngleFromForward.normalized));
Vector2 relativeForce = (rightAngleFromForward.normalized * -1.0f) * (driftForce * 10.0f);
Debug.DrawLine((Vector3)rg.position, (Vector3)rg.GetRelativePoint(relativeForce), Color.red);
rg.AddForce(rg.GetRelativeVector(relativeForce));
}
}
screen-shot-2018-03-30-at-30121-pm.png
(52.9 kB)
Comment
Your answer
Follow this Question
Related Questions
Friction Based Car Movement 1 Answer
Better RPM?? 0 Answers
AddForce from Two Sources 1 Answer