private void CollisionResolutionSphere(SphereCollider sp1, SphereCollider sp2, float overlapDistance) { Vector3 dir = sp2._center - sp1._center; dir.Normalize(); Vector3 currPoint = sp1._center + dir * sp1.Radius; Vector3 displace = dir * overlapDistance; Vector3 projPoint = currPoint - displace; if (!sp1.IsStatic() && !sp2.IsStatic()) { this.SeparateParticleObjects(sp1.GetParticleObject(), currPoint, projPoint, sp2.GetParticleObject()); } else { if (!sp1.IsStatic()) { this.SeparateParticleObjects(sp1.GetParticleObject(), currPoint, projPoint); } else if (!sp2.IsStatic()) { this.SeparateParticleObjects(sp2.GetParticleObject(), projPoint, currPoint); } } }
public void CollisionResolutionObbSphere(ColliderBox b, SphereCollider s, bool sphereInsideObb) { Vector3 temp = this.currentClosestPointOnObb - s._center; float dirMult = sphereInsideObb ? -1 : 1; Vector3 dir = temp.normalized * dirMult; Vector3 currPoint = s._center + dir * s.Radius; Vector3 projPoint = this.currentClosestPointOnObb; if (!b.IsStatic() && !s.IsStatic()) { this.SeparateParticleObjects(s.GetParticleObject(), currPoint, projPoint, b.GetParticleObject()); } else { if (!s.IsStatic()) { this.SeparateParticleObjects(s.GetParticleObject(), currPoint, projPoint); } else if (!b.IsStatic()) { this.SeparateParticleObjects(b.GetParticleObject(), projPoint, currPoint); } } }