예제 #1
0
        private void SetupInputs(XRInputMap inputMap)
        {
            foreach (XRInputDescription map in inputMap.Descriptions)
            {
                if (map.Chirality != ControllerChirality)
                {
                    continue;
                }
                if (_inputProcessors.ContainsKey(map.InputName))
                {
                    Debug.LogWarning("Duplicate InputName " +
                                     map.InputName +
                                     " specified for " +
                                     name +
                                     ", skipping.");
                    continue;
                }
                Type createType = map.InputType.GetProcessorType();
                IXRInputProcessor inputProcessor = (IXRInputProcessor)Activator.CreateInstance(createType, map);

//                Debug.Log("Adding input " + map.InputName + " on " + name);
                _inputProcessors.Add(map.InputName, inputProcessor);
            }
        }
예제 #2
0
        public virtual void Initialize(
            Chirality controllerChirality,
            XRUserRoot userRoot,
            XRUserRootConfig config,
            ulong uniqueID)
        {
            UserRoot            = userRoot;
            UniqueID            = uniqueID;
            ControllerChirality = controllerChirality;
            _inputMap           = config.InputMapping(controllerChirality);
            _hapticMap          = config.HapticMap;

            switch (ControllerChirality)
            {
            case Chirality.Left:
                _xrNode = XRNode.LeftHand;
                break;

            case Chirality.Right:
                _xrNode = XRNode.RightHand;
                break;

            case Chirality.None:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (null != config.HapticEngine)
            {
                HapticEngine = Instantiate(config.HapticEngine);
                HapticEngine.transform.SetParent(transform);
                HapticEngine.transform.localPosition = Vector3.zero;
                HapticEngine.Initialize(controllerChirality);
            }
            else
            {
                Debug.Log("HapticEngine is null for " + _inputMap.name + " on " + name);
            }

            SetupInputs(_inputMap);

            XRControllerModel model = Instantiate(config.ControllerModelPrefab(controllerChirality));

            model.transform.SetParent(transform);
            model.transform.localPosition = Vector3.zero;
            model.transform.localRotation = Quaternion.identity;
            model.Initialize(this);

            for (int i = 0; i < _physicsInteractors.Count; ++i)
            {
                _physicsInteractors[i].transform.position = model.FrontAnchor.transform.position;
                _physicsInteractors[i].transform.rotation = model.FrontAnchor.transform.rotation;
            }
            if (null != UnityUIInteractor)
            {
                UnityUIInteractor.transform.position = model.FrontAnchor.transform.position;
                UnityUIInteractor.transform.rotation = model.FrontAnchor.transform.rotation;
            }
        }