- Home /
Manually Apply Cars Collision Response Force
I want to throw cars with back force after a collision like this way. Few collision examples, I have represented in the following image with its collision back direction.
Cars are moving using applied velocity and I have applied velocity continuously to move at constant speed. Just on collision, I have stopped applying velocity for some time so I can get some collision response.
I want to get collision response as per Bumper.io game: Bumper.io Part 1 (IOS/Android)
At present, I have written some code for this purpose but it's not behaving exactly like this way:
void OnCollisionEnter(Collision other)
{
if (other.gameObject.CompareTag(GameConstants.TAG_ENEMY) || other.gameObject.CompareTag(GameConstants.TAG_PLAYER))
{
elapsedEngineStartWaiting = 0f;
StartCoroutine(ApplyReboundForce(other));
}
}
IEnumerator ApplyReboundForce(Collision other)
{
Vector3 centroid = new Vector3(0, 0, 0);
foreach (ContactPoint contact in other.contacts)
{
centroid += contact.point;
}
centroid = centroid / other.contacts.Length;
Vector3 projection = transform.position;
projection.x = centroid.x;
Vector3 normaliseCollisionPoint = Vector3.Normalize(projection - centroid);
float collidedBodyMass = other.gameObject.GetComponent<Rigidbody>().mass;
myRigidbody.velocity = Vector3.zero;
myRigidbody.angularVelocity = Vector3.zero;
int i = 0;
while (i < 4)
{
myRigidbody.AddForce(normaliseCollisionPoint * GameConstants.CAR_COLLISION_IMPULSE * collidedBodyMass, ForceMode.Impulse);
yield return new WaitForFixedUpdate();
i++;
}
}
At present, collision response force direction does not remain as per, I mentioned in the above image. I want to force/impulse should be applied in above-mentioned directions.
Give me some suggestion so I can able to implement suggested things.