public void ModificationCallback(PhysicsScene scene, NativeArray <ModifiableContactPair> contactPairs) { foreach (var pair in contactPairs) { ContactModType colliderModType = ContactModType.None; ContactModType otherColliderModType = ContactModType.None; modifiableColliders.TryGetValue(pair.colliderInstanceID, out colliderModType); modifiableColliders.TryGetValue(pair.otherColliderInstanceID, out otherColliderModType); if (colliderModType == ContactModType.Boost || otherColliderModType == ContactModType.Boost) { ModifyBoostPair(pair); } if (colliderModType == ContactModType.NoSeparation || otherColliderModType == ContactModType.NoSeparation) { ModifyNoSeparationPair(pair); } if (colliderModType == ContactModType.Valve || otherColliderModType == ContactModType.Valve) { ModifyValvePair(pair); } } }
private void SetupContactModGameObjects(string gameObjectTag, ContactModType contactModType) { // find gameobjects with specific tag to mark them for contact modification + cache their data on hash map foreach (GameObject gameObject in GameObject.FindGameObjectsWithTag(gameObjectTag)) { Collider collider = gameObject.GetComponent <Collider>(); if (collider == null) { continue; } collider.hasModifiableContacts = true; modifiableColliders.Add(collider.GetInstanceID(), contactModType); } }