static float TransformToAxis(Hull3D box, Vector3 halfsize, Vector3 axis)
    {
        Matrix4x4 boxTrans = box.GetComponent <Particle3D>().GetLocalToWorldtransform(false);

        return
            (halfsize.x * Mathf.Abs(Vector3.Dot(boxTrans.GetColumn(0), (Vector3)axis)) +
             halfsize.y * Mathf.Abs(Vector3.Dot(boxTrans.GetColumn(1), (Vector3)axis)) +
             halfsize.z * Mathf.Abs(Vector3.Dot(boxTrans.GetColumn(2), (Vector3)axis)));
    }
 bool CheckIfCollisionsContains(Hull3D hull1, Hull3D hull2)
 {
     for (int i = 0; i < Collisions.Count; i++)
     {
         if ((Collisions[i].a.name.Equals(hull1.gameObject.name) && Collisions[i].b.gameObject.name.Equals(hull2.name)) || (Collisions[i].a.gameObject.name.Equals(hull2.name) && Collisions[i].b.gameObject.name.Equals(hull1.name)))
         {
             return(true);
         }
     }
     return(false);
 }
    static float OverlapOnAxis(Hull3D one, Hull3D two, Vector3 oneHalfSize, Vector3 twoHalfSize, Vector3 axis, Vector3 toCentre)
    {
        // Project the half-size of one onto axis
        float oneProject = TransformToAxis(one, oneHalfSize, axis);
        float twoProject = TransformToAxis(two, twoHalfSize, axis);

        // Project this onto the axis
        float distance = Mathf.Abs(Vector3.Dot(toCentre, axis));
        float overlap  = (oneProject + twoProject) - distance;

        // Check for overlap
        return(overlap);
    }
 public void AddCollisionHull(Hull3D hull)
 {
     allColliders.Add(hull);
 }