public void DisableColliderCollPair(Collider2D coll1, Collider2D coll2, string key) { // only disable if both are colliders and are enabled if (coll1.isTrigger || coll2.isTrigger) { return; } Collider2DPair colliderPair = new Collider2DPair(coll1, coll2); LogicLocker collLocker = null; if (disabledColliders.TryGetValue(colliderPair, out collLocker)) { collLocker.SetLocker(key); } else { collLocker = new LogicLocker(); collLocker.SetLocker(key); disabledColliders.Add(colliderPair, collLocker); // make sure that objs have a destroy signal component if (coll1.GetComponent <ObjDestroyedSignal>() == null) { coll1.gameObject.AddComponent <ObjDestroyedSignal>(); } if (coll2.GetComponent <ObjDestroyedSignal>() == null) { coll2.gameObject.AddComponent <ObjDestroyedSignal>(); } } // tell the physics engine to ignore collision between the two colliders Physics2D.IgnoreCollision(coll1, coll2); }
private void EnableColliderCollPair(Collider2DPair colliderPair, string key) { LogicLocker collLocker = null; if (disabledColliders.TryGetValue(colliderPair, out collLocker)) { collLocker.RemoveLocker(key); if (!collLocker.IsLocked()) { // tell the phsyics engine to enable collisions between the two colliders Physics2D.IgnoreCollision(colliderPair.coll1, colliderPair.coll2, false); // remove the pair from the dictionary disabledColliders.Remove(colliderPair); } } }
public void EnableColliderCollPair(Collider2D coll1, Collider2D coll2, string key) { Collider2DPair colliderPair = new Collider2DPair(coll1, coll2); EnableColliderCollPair(colliderPair, key); }