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);
            }
        }
示例#2
0
        //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);
        }