private void Collide(MonoPhysicalSphere a, MonoPhysicalSphere b) { //if (a == null || b == null) // return; if (a.IsLastColliderEqual(b) || b.IsLastColliderEqual(a)) { return; } a.SetLastCollider(b); b.SetLastCollider(a); float dot = Vector3.Dot(a.Velocity, b.Velocity); float dist = Vector3.Distance(a.transform.position, b.transform.position); float radiusSum = a.Radius + b.Radius; if (dist > radiusSum) { return; } //Debug.Log("Collision"); Vector3 aToB = (b.transform.position - a.transform.position).normalized; Vector3 pushFromA = radiusSum * aToB; // position correction b.transform.position = a.transform.position + 1f * pushFromA; //a.transform.position = b.transform.position - 0.5f * pushFromA; TwoDimensionReflection(a, b); }