public void Initialize(NVRHand trackingHand, bool initialState) { Hand = trackingHand; Hand.gameObject.SetActive(false); PhysicalController = Instantiate(Hand.gameObject); PhysicalController.name = PhysicalController.name.Replace("(Clone)", " [Physical]"); Hand.gameObject.SetActive(true); Component[] components = PhysicalController.GetComponentsInChildren <Component>(true); foreach (Component component in components) { Type component_type = component.GetType(); if (KeepTypes.Any(keepType => keepType == component_type || component_type.IsSubclassOf(keepType)) == false) { DestroyImmediate(component); } } PhysicalController.transform.parent = Hand.transform.parent; PhysicalController.transform.position = Hand.transform.position; PhysicalController.transform.rotation = Hand.transform.rotation; PhysicalController.transform.localScale = Hand.transform.localScale; PhysicalController.SetActive(true); if (Hand.HasCustomModel) { SetupCustomModel(); } else { Colliders = Hand.SetupDefaultPhysicalColliders(PhysicalController.transform); } if (Colliders == null) { Debug.LogError("[NewtonVR] Error: Physical colliders on hand not setup properly."); } Rigidbody = PhysicalController.GetComponent <Rigidbody>(); Rigidbody.isKinematic = false; Rigidbody.maxAngularVelocity = float.MaxValue; if (trackingHand.Player.AutomaticallySetControllerTransparency) { Renderer[] renderers = PhysicalController.GetComponentsInChildren <Renderer>(); for (int index = 0; index < renderers.Length; index++) { NVRHelpers.SetOpaque(renderers[index].material); } } if (initialState == false) { Off(); } else { On(); } }
public void Initialize(NVRHand trackingHand, bool initialState) { Hand = trackingHand; PhysicalController = GameObject.Instantiate(Hand.gameObject); PhysicalController.name = PhysicalController.name.Replace("(Clone)", " [Physical]"); Component[] components = PhysicalController.GetComponentsInChildren <Component>(true); for (int componentIndex = 0; componentIndex < components.Length; componentIndex++) { Type componentType = components[componentIndex].GetType(); if (KeepTypes.Any(keepType => keepType == componentType || componentType.IsSubclassOf(keepType)) == false) { DestroyImmediate(components[componentIndex]); } } PhysicalController.transform.parent = Hand.transform.parent; PhysicalController.transform.position = Hand.transform.position; PhysicalController.transform.rotation = Hand.transform.rotation; PhysicalController.transform.localScale = Hand.transform.localScale; string controllerModel = Hand.GetDeviceName(); switch (controllerModel) { case "Custom": Transform customCollidersTransform = null; if (Hand.CustomPhysicalColliders == null) { GameObject customColliders = GameObject.Instantiate(Hand.CustomModel); customColliders.name = "CustomColliders"; customCollidersTransform = customColliders.transform; customCollidersTransform.parent = PhysicalController.transform; customCollidersTransform.localPosition = Vector3.zero; customCollidersTransform.localRotation = Quaternion.identity; customCollidersTransform.localScale = Vector3.one; foreach (Collider col in customColliders.GetComponentsInChildren <Collider>()) { col.isTrigger = false; } Colliders = customCollidersTransform.GetComponentsInChildren <Collider>(); } else { GameObject customColliders = GameObject.Instantiate(Hand.CustomPhysicalColliders); customColliders.name = "CustomColliders"; customCollidersTransform = customColliders.transform; customCollidersTransform.parent = PhysicalController.transform; customCollidersTransform.localPosition = Vector3.zero; customCollidersTransform.localRotation = Quaternion.identity; customCollidersTransform.localScale = Hand.CustomPhysicalColliders.transform.localScale; } Colliders = customCollidersTransform.GetComponentsInChildren <Collider>(); break; default: Colliders = Hand.SetupDefaultPhysicalColliders(PhysicalController.transform); break; } if (Colliders == null) { Debug.LogError("[NewtonVR] Error: Physical colliders on hand not setup properly."); } Rigidbody = PhysicalController.GetComponent <Rigidbody>(); Rigidbody.isKinematic = false; Rigidbody.maxAngularVelocity = float.MaxValue; if (trackingHand.Player.AutomaticallySetControllerTransparency) { Renderer[] renderers = PhysicalController.GetComponentsInChildren <Renderer>(); for (int index = 0; index < renderers.Length; index++) { NVRHelpers.SetOpaque(renderers[index].material); } } if (initialState == false) { Off(); } else { On(); } }