public void AddExplosionForce(float force, Vector3 position, float explosionRadius, ForceMode forceMode = ForceMode.Force) { float distance = Vector3.Distance(position, transform.position); if (distance < explosionRadius) { AddForce(ExtVector3.Direction(position, transform.position) * (force * (distance / explosionRadius)), forceMode); } }
//Ive seen bugginess when the capsule shape is actually a sphere shape (or at least when segment0 and segment1 are equal), //it would collide when not really near something, so we try to detect that and make it a capsule by offsetting it by a tiny amount. static Vector3 MakeRealCapsule(Vector3 segment0, Vector3 segment1, float radius) { float radiusDoubled = radius * 2f; if ((segment1 - segment0).sqrMagnitude <= radiusDoubled.Squared()) { Vector3 direction = ExtVector3.Direction(segment0, segment1); if (direction == Vector3.zero) { direction = Vector3.up; } segment1 += (direction * .0001f); } return(segment1); }