private void AttachElementToController(MotionControllerInfo newController) { #if UNITY_WSA && UNITY_2017_2_OR_NEWER // Check handedness if (!IsAttached && newController.Handedness == handedness) { // Get specific element of the controller if (!newController.TryGetElement(element, out elementTransform)) { Debug.LogError("Unable to find element of type " + element + " under controller " + newController.ControllerParent.name + "; not attaching."); return; } controller = newController; SetChildrenActive(true); // Parent ourselves under the element and set our offsets transform.parent = elementTransform; transform.localPosition = positionOffset; transform.localEulerAngles = rotationOffset; if (setScaleOnAttach) { transform.localScale = scale; } // Announce that we're attached OnAttachToController(); IsAttached = true; } #endif }
private void FinishControllerSetup(GameObject controllerModelGameObject, InteractionSourceHandedness handedness, string dictionaryKey) { var parentGameObject = new GameObject { name = handedness + "Controller" }; parentGameObject.transform.parent = transform; controllerModelGameObject.transform.parent = parentGameObject.transform; var newControllerInfo = new MotionControllerInfo(parentGameObject, handedness); newControllerInfo.LoadInfo(controllerModelGameObject.GetComponentsInChildren <Transform>()); if (handedness == InteractionSourceHandedness.Left) { leftControllerModel = newControllerInfo; } else if (handedness == InteractionSourceHandedness.Right) { rightControllerModel = newControllerInfo; } if (OnControllerModelLoaded != null) { OnControllerModelLoaded(newControllerInfo); } loadingControllers.Remove(dictionaryKey); controllerDictionary.Add(dictionaryKey, newControllerInfo); }
/// <summary> /// When a controller is lost, the model is destroyed and the controller object /// is removed from the tracking dictionary. /// </summary> /// <param name="obj">The source event args to be used to determine the controller model to be removed.</param> private void InteractionManager_InteractionSourceLost(InteractionSourceLostEventArgs obj) { InteractionSource source = obj.state.source; if (source.kind == InteractionSourceKind.Controller) { MotionControllerInfo controllerInfo; if (controllerDictionary != null && controllerDictionary.TryGetValue(GenerateKey(source), out controllerInfo)) { if (OnControllerModelUnloaded != null) { OnControllerModelUnloaded(controllerInfo); } if (controllerInfo.Handedness == InteractionSourceHandedness.Left) { leftControllerModel = null; } else if (controllerInfo.Handedness == InteractionSourceHandedness.Right) { rightControllerModel = null; } controllerInfo.ControllerParent.SetActive(false); } } }
private void StartTrackingController(InteractionSource source) { string key = GenerateKey(source); MotionControllerInfo controllerInfo; if (source.kind == InteractionSourceKind.Controller) { if (!controllerDictionary.ContainsKey(key) && !loadingControllers.Contains(key)) { StartCoroutine(LoadControllerModel(source)); } else if (controllerDictionary.TryGetValue(key, out controllerInfo)) { if (controllerInfo.Handedness == InteractionSourceHandedness.Left) { leftControllerModel = controllerInfo; } else if (controllerInfo.Handedness == InteractionSourceHandedness.Right) { rightControllerModel = controllerInfo; } controllerInfo.ControllerParent.SetActive(true); if (OnControllerModelLoaded != null) { OnControllerModelLoaded(controllerInfo); } } } }
private void DetachElementFromController(MotionControllerInfo oldController) { #if UNITY_WSA && UNITY_2017_2_OR_NEWER if (IsAttached && oldController.Handedness == handedness) { OnDetachFromController(); controller = null; transform.parent = null; SetChildrenActive(false); IsAttached = false; } #endif }
public bool TryGetControllerModel(InteractionSourceHandedness handedness, out MotionControllerInfo controller) { if (handedness == InteractionSourceHandedness.Left && leftControllerModel != null) { controller = leftControllerModel; return(true); } else if (handedness == InteractionSourceHandedness.Right && rightControllerModel != null) { controller = rightControllerModel; return(true); } else { controller = null; return(false); } }