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); }