private void UpdateVisual(int index, ControllerState state)
 {
     if (m_ControllerVisuals[index] == null && state.controllerType != ControllerType.CONTROLLER_TYPE_UNKNOWN)
     {
         ControllerVisualType visualType = ControllerVisualFactory.GetDefaultVisualType(state.controllerType);
         CreateControllerVisual(index, visualType);
     }
     if (m_ControllerVisuals[index] != null)
     {
         m_ControllerVisuals[index].SetActive(NRInput.ControllerVisualActive);
         m_ControllerVisuals[index].UpdateVisual(state);
     }
 }
        private void CreateControllerVisual(int index, ControllerVisualType visualType)
        {
            GameObject visualGo = ControllerVisualFactory.CreateControllerVisualObject(visualType);

            if (visualGo == null)
            {
                return;
            }
            m_ControllerVisuals[index] = visualGo.GetComponent <IControllerVisual>();
            if (m_ControllerVisuals[index] != null)
            {
                ControllerAnchorEnum ancherEnum = (index == 0 ? ControllerAnchorEnum.RightModelAnchor : ControllerAnchorEnum.LeftModelAnchor);
                visualGo.transform.parent        = NRInput.AnchorsHelper.GetAnchor(ancherEnum);
                visualGo.transform.localPosition = Vector3.zero;
                visualGo.transform.localRotation = Quaternion.identity;
                visualGo.transform.localScale    = Vector3.one;
            }
            else
            {
                Debug.LogError("The ControllerVisual prefab:" + visualGo.name + " does not contain IControllerVisual interface");
                Destroy(visualGo);
            }
        }