protected virtual void SetupColliders() { createColliders = false; Collider[] foundColliders = VRTK_SharedMethods.GetCollidersInGameObjects(new GameObject[] { gameObject }, true, true); if (foundColliders.Length == 0) { Object defaultColliderPrefab = Resources.Load(VRTK_SDK_Bridge.GetControllerDefaultColliderPath(controllerReference.hand)); if (defaultColliderPrefab == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.SDK_OBJECT_NOT_FOUND, "default collider prefab", "Controller SDK")); return; } createColliders = true; customColliderContainer = Instantiate(defaultColliderPrefab) as GameObject; customColliderContainer.transform.SetParent(transform); customColliderContainer.transform.localPosition = Vector3.zero; customColliderContainer.transform.localRotation = Quaternion.identity; customColliderContainer.transform.localScale = Vector3.one; customColliderContainer.name = VRTK_SharedMethods.GenerateVRTKObjectName(true, "Controller", "TrackedCollidersContainer"); foundColliders = VRTK_SharedMethods.GetCollidersInGameObjects(new GameObject[] { gameObject }, true, true); } trackedColliders = foundColliders; Collider[] touchColliders = interactTouch.ControllerColliders(); for (int touchColliderIndex = 0; touchColliderIndex < touchColliders.Length; touchColliderIndex++) { for (int trackedColliderIndex = 0; trackedColliderIndex < trackedColliders.Length; trackedColliderIndex++) { Physics.IgnoreCollision(touchColliders[touchColliderIndex], trackedColliders[trackedColliderIndex], true); } } }
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); } } } }