protected virtual void ToggleRigidbody(Collider collider, bool state) { if (isEnabled || !state) { if (activateTrackedCollider) { VRTK_ControllerTrackedCollider trackedCollider = collider.GetComponentInParent <VRTK_ControllerTrackedCollider>(); if (trackedCollider != null) { trackedCollider.ToggleColliders(state); EmitEvent(state, trackedCollider.interactTouch); } } if (activateInteractTouch) { VRTK_InteractTouch touch = collider.GetComponentInParent <VRTK_InteractTouch>(); if (touch != null) { touch.ToggleControllerRigidBody(state, state); EmitEvent(state, touch); } } } }
protected virtual void ManageTouchCollision(VRTK_InteractTouch touchToIgnore, bool ignore) { Collider[] interactTouchColliders = touchToIgnore.ControllerColliders(); VRTK_ControllerTrackedCollider trackedColliderValue = VRTK_SharedMethods.GetDictionaryValue(VRTK_ObjectCache.registeredTrackedColliderToInteractTouches, touchToIgnore); if (trackedColliderValue != null) { Collider[] trackedColliders = trackedColliderValue.TrackedColliders(); interactTouchColliders = interactTouchColliders.Concat(trackedColliders).ToArray(); } for (int touchCollidersIndex = 0; touchCollidersIndex < interactTouchColliders.Length; touchCollidersIndex++) { for (int localCollidersIndex = 0; localCollidersIndex < localColliders.Length; localCollidersIndex++) { if (localColliders[localCollidersIndex] != null && interactTouchColliders[touchCollidersIndex] != null && !ShouldExclude(localColliders[localCollidersIndex].transform)) { Physics.IgnoreCollision(localColliders[localCollidersIndex], interactTouchColliders[touchCollidersIndex], ignore); } } } }