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); } }
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; } }