// Start is called before the first frame update void Start() { MLInput.Start(); controller = MLInput.GetController(MLInput.Hand.Left); UnSelectAll(); up.SetActive(true); }
// Start is called before the first frame update void Start() { MLInput.Start(); //MLInput.OnControllerButtonDown += OnButtonDown; //MLInput.OnControllerButtonUp += OnButtonUp; controller = MLInput.GetController(MLInput.Hand.Left); }
//Private Methods: private void GetControl() { for (int i = 0; i < 2; ++i) { MLInput.Controller control = MLInput.GetController(i); if (control.Type == MLInput.Controller.ControlType.Control) { switch (handedness) { case ControlHandedness.Any: Initialize(control); break; case ControlHandedness.Left: if (control.Hand == MLInput.Hand.Left) { Initialize(control); } break; case ControlHandedness.Right: if (control.Hand == MLInput.Hand.Right) { Initialize(control); } break; } } } }
/// <summary> /// Update controller input based feedback. /// </summary> void Update() { if (_controllerConnectionHandler.IsControllerValid()) { #if PLATFORM_LUMIN MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; if (controller.Type == MLInput.Controller.ControlType.Control) { // For Control, raw input is enough transform.localPosition = controller.Position; transform.localRotation = controller.Orientation; } else if (controller.Type == MLInput.Controller.ControlType.MobileApp) { // For Mobile App, there is no positional data and orientation needs calibration transform.position = _camera.transform.position + (_camera.transform.forward * MOBILEAPP_FORWARD_DISTANCE_FROM_CAMERA * MLDevice.WorldScale) + (Vector3.up * MOBILEAPP_UP_DISTANCE_FROM_CAMERA * MLDevice.WorldScale); if (_isCalibrated) { transform.localRotation = _calibrationOrientation * controller.Orientation; } else { transform.LookAt(transform.position + Vector3.up, -Camera.main.transform.forward); } } #endif } }
private void HandleControlConnected(byte controlId) { //we just want to work with the control: MLInput.Controller connectedControl = MLInput.GetController(controlId); switch (handedness) { case ControlHandedness.Any: Initialize(MLInput.GetController(controlId)); break; case ControlHandedness.Left: if (connectedControl.Hand == MLInput.Hand.Left) { Initialize(MLInput.GetController(controlId)); } break; case ControlHandedness.Right: if (connectedControl.Hand == MLInput.Hand.Right) { Initialize(MLInput.GetController(controlId)); } break; } }
public static MLInput.Controller.ControlType determineControllerType(byte controllerId) { // // The first controller is considered the left handed controller, even though // we may hold the controller in our right hand :) // MLInput.Controller leftHandController = MLInput.GetController(MLInput.Hand.Left); MLInput.Controller rightHandController = MLInput.GetController(MLInput.Hand.Right); bool isMobileAppLeft = (leftHandController != null && leftHandController.Type == MLInput.Controller.ControlType.MobileApp); bool isMobileAppRight = (rightHandController != null && rightHandController.Type == MLInput.Controller.ControlType.MobileApp); bool isControllerLeft = (leftHandController != null && leftHandController.Type == MLInput.Controller.ControlType.Control); bool isControllerRight = (rightHandController != null && rightHandController.Type == MLInput.Controller.ControlType.Control); bool isMobileApp = (isMobileAppLeft || isMobileAppRight); bool isController = (isControllerLeft || isControllerRight); if (isMobileApp) { return(MLInput.Controller.ControlType.MobileApp); } if (isController) { return(MLInput.Controller.ControlType.Control); } return(MLInput.Controller.ControlType.None); }
/// <summary> /// Update the touchpad's indicator: (location, directions, color). /// Also updates the color of the touchpad, based on pressure. /// </summary> private void UpdateTouchpadIndicator() { if (!_controllerConnectionHandler.IsControllerValid()) { return; } #if PLATFORM_LUMIN MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; Vector3 updatePosition = new Vector3(controller.Touch1PosAndForce.x, 0.0f, controller.Touch1PosAndForce.y); float touchY = _touchIndicatorTransform.localPosition.y; _touchIndicatorTransform.localPosition = new Vector3(updatePosition.x * _touchpadRadius / MLDevice.WorldScale, touchY, updatePosition.z * _touchpadRadius / MLDevice.WorldScale); if (controller.Touch1Active) { _touchIndicatorTransform.gameObject.SetActive(true); float angle = Mathf.Atan2(controller.Touch1PosAndForce.x, controller.Touch1PosAndForce.y); _touchIndicatorTransform.localRotation = Quaternion.Euler(0, angle * Mathf.Rad2Deg, 0); } else { _touchIndicatorTransform.gameObject.SetActive(false); } float force = controller.Touch1PosAndForce.z; _touchpadMaterial.color = Color.Lerp(_defaultColor, _activeColor, force); #endif }
/// <summary> /// Find the point on the slider that's closest to the line defined by /// the controller's position and direction. /// </summary> /// <param name="controller">Information on the controller</param> private void HandleControllerDrag(MLInput.Controller controller) { // Line 1 is the Controller's ray Vector3 P1World = controller.Position; Vector3 V1World = controller.Orientation * Vector3.forward; // Put controller position and orientation into slider space, as relative end points are in slider space Vector3 P1 = transform.InverseTransformPoint(P1World); Vector3 V1 = transform.InverseTransformVector(V1World); // Line 2 is the slider Vector3 P2 = _beginRelative; Vector3 V2 = _endRelative - _beginRelative; Vector3 deltaP = P2 - P1; float V21 = Vector3.Dot(V2, V1); float V11 = Vector3.Dot(V1, V1); float V22 = Vector3.Dot(V2, V2); float tNum = Vector3.Dot(deltaP, V21 * V1 - V11 * V2); float tDen = V22 * V11 - V21 * V21; // Lines are parallel if (Mathf.Approximately(tDen, 0.0f)) { return; } // closest point on Line 2 to Line 1 is P2 + t * V2 // but we're only concerned with t Value = tNum / tDen; }
/// <summary> /// Update the rotation and visual color of the trigger. /// </summary> private void UpdateTriggerVisuals() { if (!_controllerConnectionHandler.IsControllerValid()) { return; } MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; #if PLATFORM_LUMIN // Change the color of the trigger _triggerMaterial.color = Color.Lerp(_defaultColor, _activeColor, controller.TriggerValue); if (_animManager == null) { if (GameObject.FindObjectOfType <Photon.Pun.Demo.PunBasics.GameManager>() != null) { _animManager = GameObject.FindObjectOfType <Photon.Pun.Demo.PunBasics.GameManager>().GetPlayerAnimatorManager(); _beforePosition = _trigger.transform.position; } } if (controller.TriggerValue == 1) { if (_animManager != null) { _animManager.gameObject.GetComponent <Rigidbody>().useGravity = true; if (_beforePosition.x - _trigger.transform.position.x > 0) { _animManager.SetDirection(0.5f); } else if (_beforePosition.x - _trigger.transform.position.x < 0) { _animManager.SetDirection(-0.5f); } } _beforePosition = _trigger.transform.position; } else { if (_animManager != null) { _animManager.SetDirection(0f); } _beforePosition = _trigger.transform.position; } #endif // Set the rotation of the trigger Vector3 eulerRot = _trigger.transform.localRotation.eulerAngles; #if PLATFORM_LUMIN eulerRot.x = Mathf.Lerp(0, MAX_TRIGGER_ROTATION, controller.TriggerValue); #endif _trigger.transform.localRotation = Quaternion.Euler(eulerRot); }
private void OnEnable() { line.enabled = true; Debug.Log("line enabled"); line.startColor = startColor; line.endColor = endColor; MLInput.Start(); controller = MLInput.GetController(MLInput.Hand.Left); triggerDown = false; }
void MLControllerConnected(byte controllerId) { #if PLATFORM_LUMIN MLInput.Controller mlController = MLInput.GetController(controllerId); if (mlController.Type == MLInput.Controller.ControlType.Control) { if (!ConnectedControllers.ContainsKey(controllerId)) { Handedness handedness = mlController.Hand == MLInput.Hand.Right ? Handedness.Right : Handedness.Left; switch (CurrentControllerSettings) { case HandSettings.None: return; case HandSettings.Left: if (handedness != Handedness.Left) { return; } break; case HandSettings.Right: if (handedness != Handedness.Right) { return; } break; case HandSettings.Both: break; } var pointers = RequestPointers(SupportedControllerType.GenericUnity, handedness); var inputSourceType = InputSourceType.Controller; IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem; var inputSource = inputSystem?.RequestNewGenericInputSource($"Magic Leap {handedness} Controller", pointers, inputSourceType); MagicLeapMRTKController controller = new MagicLeapMRTKController(mlController, TrackingState.Tracked, handedness, inputSource); for (int i = 0; i < controller.InputSource?.Pointers?.Length; i++) { controller.InputSource.Pointers[i].Controller = controller; } inputSystem?.RaiseSourceDetected(controller.InputSource, controller); ConnectedControllers[controllerId] = new MLControllerContainer() { controllerId = controllerId, mrtkController = controller }; trackedControls.Add(controller); } } #endif }
void OnTriggr() { if (isActive) { MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; if (controller.TriggerValue > 0.2f) { isActive = false; } } }
/// <summary> /// Handles the event for trigger down. /// </summary> /// <param name="controller_id">The id of the controller.</param> /// <param name="value">The value of the trigger button.</param> private void HandleOnTriggerDown(byte controllerId, float value) { MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; #if PLATFORM_LUMIN if (controller != null && controller.Id == controllerId) { MLInput.Controller.FeedbackIntensity intensity = (MLInput.Controller.FeedbackIntensity)((int)(value * 2.0f)); controller.StartFeedbackPatternVibe(MLInput.Controller.FeedbackPatternVibe.Buzz, intensity); } #endif }
public MagicLeapMRTKController(MLInput.Controller controller, TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) : base(trackingState, controllerHandedness, inputSource, interactions) { mlController = controller; MLInput.OnControllerButtonDown += MLControllerButtonDown; MLInput.OnControllerButtonUp += MLControllerButtonUp; MLInput.OnTriggerDown += MLControllerTriggerDown; MLInput.OnTriggerUp += MLControllerTriggerUp; IsPositionAvailable = true; IsPositionApproximate = true; IsRotationAvailable = true; }
/// <summary> /// Handles the event for button up. /// </summary> /// <param name="controller_id">The id of the controller.</param> /// <param name="button">The button that is being released.</param> private void HandleOnButtonUp(byte controllerId, MLInput.Controller.Button button) { MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; #if PLATFORM_LUMIN if (controller != null && controller.Id == controllerId && button == MLInput.Controller.Button.Bumper) { // Demonstrate haptics using callbacks. controller.StartFeedbackPatternVibe(MLInput.Controller.FeedbackPatternVibe.ForceUp, MLInput.Controller.FeedbackIntensity.Medium); } #endif }
private void Initialize(MLInput.Controller control) { //status: Control = control; Connected = true; OnControlConnected?.Invoke(); //hooks: MLInput.OnControllerButtonDown += HandleControlButtonDown; MLInput.OnControllerButtonUp += HandleControlButtonUp; MLInput.OnTriggerDown += HandleOnTriggerDown; MLInput.OnTriggerUp += HandleOnTriggerUp; }
private void UpdateTrigger() { if (!_controllerConnectionHandler.IsControllerValid()) { return; } MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; if (controller.TriggerValue > 0.2f) { Touch(); } }
/// <summary> /// Initializes variables. /// </summary> void Start() { #if PLATFORM_LUMIN MLResult result = MLInput.Start(); if (!result.IsOk) { Debug.LogError("Error starting MLInput, disabling script."); enabled = false; return; } _controller = MLInput.GetController(MLInput.Hand.Left); #endif _collider = GetComponent <Collider>(); }
void Update() { //Follow Controller if (_controllerConnectionHandler.IsControllerValid()) { #if PLATFORM_LUMIN MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; if (controller.Type == MLInput.Controller.ControlType.Control) { transform.position = controller.Position; transform.rotation = controller.Orientation; } #endif } }
/// <summary> /// For Mobile App, this initiates/ends the recalibration when the home tap event is triggered /// </summary> /// <param name="controllerId">The id of the controller.</param> /// <param name="button">The button that is being released.</param> private void HandleOnButtonUp(byte controllerId, MLInput.Controller.Button button) { #if PLATFORM_LUMIN MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; if (_controllerConnectionHandler.IsControllerValid(controllerId) && controller.Type == MLInput.Controller.ControlType.MobileApp && button == MLInput.Controller.Button.HomeTap) { if (!_isCalibrated) { _calibrationOrientation = transform.rotation * Quaternion.Inverse(controller.Orientation); } _isCalibrated = !_isCalibrated; } #endif }
void Start() { MLInput.Start(); MLInput.OnControllerButtonDown += HandleOnButtonDown; MLInput.OnControllerButtonUp += HandleOnButtonUp; _controller = MLInput.GetController(MLInput.Hand.Left); text = new string[5]; scn = SceneManager.GetActiveScene(); sceneName = scn.name; LogToFileHelper logger = new LogToFileHelper(); //establishing logger for storing interactions locally as a backup StartCoroutine(logger.LogToFileStringArray("log_controller.json", text)); //creating new session StartCoroutine(consoler.NewSession("http://" + LoggingConfig.ip_address + ":" + LoggingConfig.port + "/ext/" + LoggingConfig.api_key + "/new_session")); }
private void Awake() { MLInput.Start(); spawnMngr = GetComponent <SpawnManager>(); audioManager = GameObject.Find("AudioManager").GetComponent <AudioManager>(); scoreKeeping = GameObject.Find("[Content]/Controller").GetComponent <ScoreKeeping>(); trailAndBall = spawnMngr.trailAndBall.GetComponent <DisplayTrailAndBall>(); _control = MLInput.GetController(MLInput.Hand.Left); scoreText.enabled = false; summaryText.enabled = false; statusText.enabled = false; helpText.enabled = false; beamController.enabled = false; spawnMngr.enabled = false; menu.SetActive(false); canvas.SetActive(false); settings.SetActive(false); // update setting text to reflect current settings pathOn = trailAndBall.trails[0].activeSelf; if (GameObject.Find("[Content]/MLSpatialMapper/Original").GetComponent <Renderer>().material.mainTexture == null) { meshOn = false; } else { meshOn = true; } foreach (SettingType type in Enum.GetValues(typeof(SettingType))) { SetSettingText(type); } Playspace.Instance.OnCompleted.AddListener(OnPlayspaceComplete); Playspace.Instance.OnCleared.AddListener(OnPlayspaceClear); MLInput.OnControllerButtonUp += OnButtonUp; scoreKeeper.ScoreChange += OnScoreChange; beamController.OptionSelected += OnOptionSelected; wallStat = WallStat.Empty; }
/// <summary> /// Updates effects on different input responses via input polling mechanism. /// </summary> void Update() { if (_controllerConnectionHandler.IsControllerValid()) { MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; _modelRenderer.material.color = _origColor; #if PLATFORM_LUMIN UpdateTouchIndicator(_touch1Indicator, controller.Touch1Active, controller.Touch1PosAndForce); UpdateTouchIndicator(_touch2Indicator, controller.Touch2Active, controller.Touch2PosAndForce); #endif UpdateHighlights(); } else { _modelRenderer.material.color = Color.red; } }
void Update() { _statusText.text = string.Format("<color=#dbfb76><b>{0}</b></color>\n{1}: {2}\n", LocalizeManager.GetString("Controller Data"), LocalizeManager.GetString("Status"), LocalizeManager.GetString(ControllerStatus.Text)); MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; if (controller != null) { #if PLATFORM_LUMIN _statusText.text += string.Format("" + "Position: <i>{0}</i>\n" + "Rotation: <i>{1}</i>\n\n" + "<color=#dbfb76><b>Buttons</b></color>\n" + "Trigger: <i>{2}</i>\n" + "Bumper: <i>{3}</i>\n\n" + "<color=#dbfb76><b>Touchpad</b></color>\n" + "Touch 1 Location: <i>({4},{5})</i>\n" + "Touch 2 Location: <i>({6},{7})</i>\n\n" + "<color=#dbfb76><b>Gestures</b></color>\n" + "<i>{8} {9}</i>\n\n", "No information available", controller.Orientation.eulerAngles.ToString("n2"), controller.TriggerValue.ToString("n2"), controller.IsBumperDown, controller.Touch1Active ? controller.Touch1PosAndForce.x.ToString("n2") : "0.00", controller.Touch1Active ? controller.Touch1PosAndForce.y.ToString("n2") : "0.00", controller.Touch2Active ? controller.Touch2PosAndForce.x.ToString("n2") : "0.00", controller.Touch2Active ? controller.Touch2PosAndForce.y.ToString("n2") : "0.00", controller.CurrentTouchpadGesture.Type.ToString(), controller.TouchpadGestureState.ToString()); #endif _statusText.text += string.Format("<color=#dbfb76><b>{0}</b></color>\n{1}: {2}", LocalizeManager.GetString("Keyboard"), LocalizeManager.GetString("Input"), LocalizeManager.GetString(_mobileAppVisualizer.KeyboardText)); } }
IEnumerator ConnectOnValidPosition(byte controllerId) { #if PLATFORM_LUMIN MLInput.Controller mlController = MLInput.GetController(controllerId); Vector3 initialPosition = mlController.Position; while (initialPosition == mlController.Position) { yield return(null); } if (mlController.Type == MLInput.Controller.ControlType.Control) { if (!ConnectedControllers.ContainsKey(controllerId)) { Handedness handedness = mlController.Hand == MLInput.Hand.Right ? Handedness.Right : Handedness.Left; if (!IsHandednessValid(handedness, CurrentControllerSettings)) { yield break; } var pointers = RequestPointers(SupportedControllerType.GenericUnity, handedness); var inputSourceType = InputSourceType.Controller; var inputSource = Service?.RequestNewGenericInputSource($"Magic Leap {handedness} Controller", pointers, inputSourceType); MagicLeapMRTKController controller = new MagicLeapMRTKController(mlController, TrackingState.Tracked, handedness, inputSource); for (int i = 0; i < controller.InputSource?.Pointers?.Length; i++) { controller.InputSource.Pointers[i].Controller = controller; } Service?.RaiseSourceDetected(controller.InputSource, controller); ConnectedControllers[controllerId] = new MLControllerContainer() { controllerId = controllerId, mrtkController = controller }; trackedControls.Add(controller); } } #endif }
/// <summary> /// Try get controller reference. /// /// This is because "MLInput.OnControllerConnected" event won't invoke. /// I think why Zenject.IInitialize timing is too late to register an event. /// So this method try to get a reference cotroller at the initializing. /// </summary> private void TryGetController() { if (_inputController != null) { return; } if (!MLInput.IsStarted) { return; } MLResult result = MLInput.Start(); if (!result.IsOk) { return; } _inputController = MLInput.GetController(0); }
void Start() { MLInput.Start(); camera = GameObject.FindWithTag("MainCamera"); _controller = MLInput.GetController(MLInput.Hand.Left); text = new string[4]; // text[0] = "default"; // text[1] = "default"; // text[2] = "default"; // text[3] = "default"; scn = SceneManager.GetActiveScene(); sceneName = scn.name; LogToFileHelper logger = new LogToFileHelper(); //establishing logger for storing interactions locally as a backup StartCoroutine(logger.LogToFileStringArray("log_touchpad.json", text)); //creating new session StartCoroutine(consoler.NewSession("http://" + LoggingConfig.ip_address + ":" + LoggingConfig.port + "/ext/" + LoggingConfig.api_key + "/new_session")); }
/// <summary> /// Update the text for the currently connected Control or MCA device. /// </summary> private void UpdateStatus() { if (_controllerConnectionHandler.enabled) { if (_controllerConnectionHandler.IsControllerValid()) { #if PLATFORM_LUMIN MLInput.Controller controller = _controllerConnectionHandler.ConnectedController; if (controller.Type == MLInput.Controller.ControlType.Control) { Text = "Controller Connected"; Color = Color.green; } else if (controller.Type == MLInput.Controller.ControlType.MobileApp) { Text = "MLA Connected"; Color = Color.green; } else { Text = "Unknown"; Color = Color.red; } #else Text = "Unknown"; Color = Color.red; #endif } else { Text = "Disconnected"; Color = Color.yellow; } } else { Text = "Input Failed to Start"; Color = Color.red; } }
/// <summary> /// Update cursor position based on touch /// </summary> /// <param name="controller">Controller</param> private void UpdateTouchPosition(MLInput.Controller controller) { if (controller.Touch1Active) { if (_touchActiveBefore) { Vector2 pos = transform.localPosition; Vector2 currTouchPos = controller.Touch1PosAndForce; pos += (currTouchPos - _prevTouchPos) * _sensitivity; transform.localPosition = pos; } else { _prevTouchPos = controller.Touch1PosAndForce; } _touchActiveBefore = true; } else { _touchActiveBefore = false; } }
// Start is called before the first frame update void Start() { MLInput.Start(); MLInput.OnControllerButtonDown += OnButtonDown; //MLInput.OnControllerButtonUp += OnButtonUp; controller = MLInput.GetController(MLInput.Hand.Left); kill = 0; gates = Environment.instance.transform.GetChild(3);//0:Mapper 1:MapperNode 2:Origin 3:Gates totalGates = gates.childCount; //0:cylinder 1:Generattor 2:Hole 3:Collider foreach (Transform gate in gates) { gate.GetChild(3).gameObject.SetActive(false);//Colliderの消去 } gates.GetChild(0).GetChild(0).gameObject.SetActive(true); gates.GetChild(0).GetChild(1).gameObject.SetActive(true); gates.GetChild(0).GetChild(2).gameObject.SetActive(true); }