Example #1
0
        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();
            }
        }