コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }