private void HandleCollision(Hashtable payload) { Collision collision = (Collision)payload.GetAs<Collision>("collision"); foreach( ContactPoint contact in collision.contacts ){ //Register impact Impact impact = new Impact(); impact.thisGameObject = gameObject; impact.otherGameObject = collision.gameObject; impact.relativeVelocity = collision.relativeVelocity; impact.normal = contact.normal; impact.point = contact.point; impact.thisCollider = contact.thisCollider; impact.otherCollider = contact.otherCollider; impacts.Add(impact.otherGameObject, impact); impacts.Add(impact.otherCollider, impact); impacts.Add(collision.rigidbody, impact); //Update OnGround float oldDot = Vector3.Dot(groundNormal, Physics.gravity.normalized); float newDot = Vector3.Dot(contact.normal, Physics.gravity.normalized); if(newDot > oldDot) groundNormal = contact.normal; } }