예제 #1
0
        void Awake()
        {
            //Instantiate the NavigationRecognizer.
            NavigationRecognizer = new UnityEngine.XR.WSA.Input.GestureRecognizer();

            //Add NavigationX GestureSettings to the NavigationRecognizer's RecognizableGestures.
            NavigationRecognizer.SetRecognizableGestures(UnityEngine.XR.WSA.Input.GestureSettings.NavigationX);

            NavigationRecognizer.NavigationStartedEvent   += NavigationRecognizer_NavigationStartedEvent;
            NavigationRecognizer.NavigationUpdatedEvent   += NavigationRecognizer_NavigationUpdatedEvent;
            NavigationRecognizer.NavigationCompletedEvent += NavigationRecognizer_NavigationCompletedEvent;
            NavigationRecognizer.NavigationCanceledEvent  += NavigationRecognizer_NavigationCanceledEvent;

            // Instantiate the ManipulationRecognizer.
            ManipulationRecognizer = new UnityEngine.XR.WSA.Input.GestureRecognizer();

            // Add the ManipulationTranslate GestureSetting to the ManipulationRecognizer's RecognizableGestures.
            ManipulationRecognizer.SetRecognizableGestures(UnityEngine.XR.WSA.Input.GestureSettings.ManipulationTranslate);

            ManipulationRecognizer.ManipulationStartedEvent   += ManipulationRecognizer_ManipulationStartedEvent;
            ManipulationRecognizer.ManipulationUpdatedEvent   += ManipulationRecognizer_ManipulationUpdatedEvent;
            ManipulationRecognizer.ManipulationCompletedEvent += ManipulationRecognizer_ManipulationCompletedEvent;
            ManipulationRecognizer.ManipulationCanceledEvent  += ManipulationRecognizer_ManipulationCanceledEvent;

            SetActiveRecognizer(ManipulationRecognizer);
        }
예제 #2
0
 private void Start()
 {
     recognizer = new UnityEngine.XR.WSA.Input.GestureRecognizer();
     recognizer.SetRecognizableGestures(UnityEngine.XR.WSA.Input.GestureSettings.Tap);
     recognizer.TappedEvent += Recognizer_TappedEvent;
     recognizer.StartCapturingGestures();
 }
        // This should be Start instead of Awake right?
        protected void Start()
        {
            ActiveRecognizer = new UnityEngine.XR.WSA.Input.GestureRecognizer();

            ActiveRecognizer.SetRecognizableGestures(RecognizableGesures);

            ActiveRecognizer.TappedEvent += TappedCallback;

            ActiveRecognizer.NavigationStartedEvent   += NavigationStartedCallback;
            ActiveRecognizer.NavigationUpdatedEvent   += NavigationUpdatedCallback;
            ActiveRecognizer.NavigationCompletedEvent += NavigationCompletedCallback;
            ActiveRecognizer.NavigationCanceledEvent  += NavigationCanceledCallback;

            ActiveRecognizer.HoldStartedEvent   += HoldStartedCallback;
            ActiveRecognizer.HoldCompletedEvent += HoldCompletedCallback;
            ActiveRecognizer.HoldCanceledEvent  += HoldCanceledCallback;

            ActiveRecognizer.ManipulationStartedEvent   += ManipulationStartedCallback;
            ActiveRecognizer.ManipulationUpdatedEvent   += ManipulationUpdatedCallback;
            ActiveRecognizer.ManipulationCompletedEvent += ManipulationCompletedCallback;
            ActiveRecognizer.ManipulationCanceledEvent  += ManipulationCanceledCallback;

            ActiveRecognizer.StartCapturingGestures();
            SetupEvents(true);

            UnityEngine.XR.WSA.Input.InteractionManager.InteractionSourcePressed  += InteractionManager_SourcePressedCallback;
            UnityEngine.XR.WSA.Input.InteractionManager.InteractionSourceReleased += InteractionManager_SourceReleasedCallback;

            bLockFocus = true;
        }
예제 #4
0
        void Awake()
        {
            //instantiate the gesture recognizers
            NavigationRecognizer   = new UnityEngine.XR.WSA.Input.GestureRecognizer();
            ManipulationRecognizer = new UnityEngine.XR.WSA.Input.GestureRecognizer();
            //add the appropriate recognizable gestures to each one
            //for more info on these gestures refer to https://developer.microsoft.com/en-us/windows/mixed-reality/gestures
            NavigationRecognizer.SetRecognizableGestures(UnityEngine.XR.WSA.Input.GestureSettings.Tap | UnityEngine.XR.WSA.Input.GestureSettings.NavigationX); //NavigationX will keep track of Air tap & hold in the X direction
            ManipulationRecognizer.SetRecognizableGestures(UnityEngine.XR.WSA.Input.GestureSettings.ManipulationTranslate);

            //register the navigation event handlers with the functions below
            NavigationRecognizer.TappedEvent              += NavTapped;
            NavigationRecognizer.NavigationStartedEvent   += NavStarted;
            NavigationRecognizer.NavigationUpdatedEvent   += NavUpdated;
            NavigationRecognizer.NavigationCompletedEvent += NavCompleted;
            NavigationRecognizer.NavigationCanceledEvent  += NavCanceled;

            //register the manipulation event handlers with the functions below
            ManipulationRecognizer.ManipulationStartedEvent   += ManStarted;
            ManipulationRecognizer.ManipulationUpdatedEvent   += ManUpdated;
            ManipulationRecognizer.ManipulationCompletedEvent += ManCompleted;
            ManipulationRecognizer.ManipulationCanceledEvent  += ManCanceled;

            ResetGestureRecognizers();
        }
        public static void UpdateAndResetGestures(this UnityEngine.XR.WSA.Input.GestureRecognizer recognizer, UnityEngine.XR.WSA.Input.GestureSettings gestureSettings)
        {
            bool reset = recognizer.IsCapturingGestures();

            if (reset)
            {
                recognizer.CancelGestures();
            }

            recognizer.SetRecognizableGestures(gestureSettings);

            if (reset)
            {
                recognizer.StartCapturingGestures();
            }
        }
예제 #6
0
        protected override void Start()
        {
            base.Start();

            gestureRecognizer              = new UnityEngine.XR.WSA.Input.GestureRecognizer();
            gestureRecognizer.TappedEvent += OnTappedEvent;

            gestureRecognizer.HoldStartedEvent   += OnHoldStartedEvent;
            gestureRecognizer.HoldCompletedEvent += OnHoldCompletedEvent;
            gestureRecognizer.HoldCanceledEvent  += OnHoldCanceledEvent;

            gestureRecognizer.ManipulationStartedEvent   += OnManipulationStartedEvent;
            gestureRecognizer.ManipulationUpdatedEvent   += OnManipulationUpdatedEvent;
            gestureRecognizer.ManipulationCompletedEvent += OnManipulationCompletedEvent;
            gestureRecognizer.ManipulationCanceledEvent  += OnManipulationCanceledEvent;

            gestureRecognizer.SetRecognizableGestures(UnityEngine.XR.WSA.Input.GestureSettings.Tap |
                                                      UnityEngine.XR.WSA.Input.GestureSettings.ManipulationTranslate |
                                                      UnityEngine.XR.WSA.Input.GestureSettings.Hold);

            // We need a separate gesture recognizer for navigation, since it isn't compatible with manipulation
            navigationGestureRecognizer = new UnityEngine.XR.WSA.Input.GestureRecognizer();

            navigationGestureRecognizer.NavigationStartedEvent   += OnNavigationStartedEvent;
            navigationGestureRecognizer.NavigationUpdatedEvent   += OnNavigationUpdatedEvent;
            navigationGestureRecognizer.NavigationCompletedEvent += OnNavigationCompletedEvent;
            navigationGestureRecognizer.NavigationCanceledEvent  += OnNavigationCanceledEvent;

            if (UseRailsNavigation)
            {
                navigationGestureRecognizer.SetRecognizableGestures(UnityEngine.XR.WSA.Input.GestureSettings.NavigationRailsX |
                                                                    UnityEngine.XR.WSA.Input.GestureSettings.NavigationRailsY |
                                                                    UnityEngine.XR.WSA.Input.GestureSettings.NavigationRailsZ);
            }
            else
            {
                navigationGestureRecognizer.SetRecognizableGestures(UnityEngine.XR.WSA.Input.GestureSettings.NavigationX |
                                                                    UnityEngine.XR.WSA.Input.GestureSettings.NavigationY |
                                                                    UnityEngine.XR.WSA.Input.GestureSettings.NavigationZ);
            }

            if (RecognizerStart == RecognizerStartBehavior.AutoStart)
            {
                gestureRecognizer.StartCapturingGestures();
                navigationGestureRecognizer.StartCapturingGestures();
            }
        }
예제 #7
0
        public override void ActivateModule()
        {
            base.ActivateModule();

            eventSystem.SetSelectedGameObject(eventSystem.currentSelectedGameObject, GetBaseEventData());

            m_GestureRecognizer                           = new UnityEngine.XR.WSA.Input.GestureRecognizer();
            m_GestureRecognizer.TappedEvent              += GestureHandler_Tapped;
            m_GestureRecognizer.NavigationStartedEvent   += GestureHandler_NavigationStarted;
            m_GestureRecognizer.NavigationUpdatedEvent   += GestureHandler_NavigationUpdated;
            m_GestureRecognizer.NavigationCompletedEvent += GestureHandler_NavigationCompletedOrCanceled;
            m_GestureRecognizer.NavigationCanceledEvent  += GestureHandler_NavigationCompletedOrCanceled;
            m_GestureRecognizer.SetRecognizableGestures(
                UnityEngine.XR.WSA.Input.GestureSettings.Tap
                | UnityEngine.XR.WSA.Input.GestureSettings.NavigationX
                | UnityEngine.XR.WSA.Input.GestureSettings.NavigationY
                | UnityEngine.XR.WSA.Input.GestureSettings.NavigationZ);
            m_GestureRecognizer.StartCapturingGestures();
        }
예제 #8
0
 //method to transition to a new GestureRecognizer
 public void Transition(UnityEngine.XR.WSA.Input.GestureRecognizer newRecognizer)
 {
     //check if input parameter is null
     if (newRecognizer == null)
     {
         return;
     }
     if (ActiveRecognizer != null)
     {
         //if the active recognizer isn't null and not the same as the new recognizer cancel all gesures and complete the switch
         if (ActiveRecognizer == newRecognizer)
         {
             return;
         }
         ActiveRecognizer.CancelGestures();
         ActiveRecognizer = newRecognizer;
     }
     newRecognizer.StartCapturingGestures();
     ActiveRecognizer = newRecognizer;
 }
예제 #9
0
        public void SetActiveRecognizer(UnityEngine.XR.WSA.Input.GestureRecognizer newRecognizer)
        {
            if (newRecognizer == null)
            {
                return;
            }

            if (ActiveRecognizer != null)
            {
                if (ActiveRecognizer == newRecognizer)
                {
                    return;
                }

                ActiveRecognizer.CancelGestures();
                ActiveRecognizer.StopCapturingGestures();
            }

            newRecognizer.StartCapturingGestures();
            ActiveRecognizer = newRecognizer;
        }
예제 #10
0
        public void Start()
        {
            m_datetime = DateTime.Now;
            StartCoroutine(DownloadPlaces(queryURL));
            StartCoroutine(DownloadKeywords(queryURL));
            this._gestureRecognizer = new UnityEngine.XR.WSA.Input.GestureRecognizer();
            this._gestureRecognizer.SetRecognizableGestures(
                UnityEngine.XR.WSA.Input.GestureSettings.Tap |
                UnityEngine.XR.WSA.Input.GestureSettings.DoubleTap |
                UnityEngine.XR.WSA.Input.GestureSettings.Hold |
                UnityEngine.XR.WSA.Input.GestureSettings.ManipulationTranslate
                );

            /*
             * this._gestureRecognizer.HoldStartedEvent += (source, ray) =>
             * {
             *  GameObject terrain = GameObject.Find("terrain");
             *  buttonObject = Instantiate(buttonZoomPrefab, this.gameObject.transform.position + new Vector3(0, 0.2f, 0), Quaternion.Euler(0, -90, 0)) as StableMenu;
             *  buttonObject.transform.parent = terrain.transform;
             * };
             */


            // Repond to single and double tap.
            this._gestureRecognizer.TappedEvent += (source, count, ray) =>
            {
                switch (count)
                {
                case 1:
                    if (this._isMoving)
                    {
                        if (GazeManager.Instance.Hit)
                        {
                            // Cease moving
                            this._isMoving = false;

                            // Stop mapping observer
                            SpatialMappingManager.Instance.StopObserver();

                            //
                            var terrain = this.transform.Find("terrain");
                            if (terrain == null)
                            {
                                // Hide footprint
                                this.transform.Find("base").GetComponent <MeshRenderer>().material.color = new Color32(100, 100, 100, 100);

                                // Add Terrain
                                _isFirstTimeLoading = true;
                            }
                            else
                            {
                                // Restore hit test
                                terrain.gameObject.layer = 0;
                            }
                        }
                    }
                    else
                    {
                        // If single tap on stationary terrain then perform reverse geocode.
                        // Exit if nothing found
                        if (!GazeManager.Instance.Hit)
                        {
                            return;
                        }
                        if (GazeManager.Instance.FocusedObject == null)
                        {
                            return;
                        }

                        // Exit if not terrain
                        if (GazeManager.Instance.FocusedObject.GetComponent <Terrain>() == null)
                        {
                            return;
                        }

                        //this.StartCoroutine(this.ChangeMapCoordinates(GazeManager.Instance.Position));
                        GameObject terrain = GameObject.Find("terrain");
                        buttonObject = Instantiate(buttonChoosePrefab, GazeManager.Instance.Position + new Vector3(0, 0.2f, 0), Quaternion.Euler(0, -90, 0)) as StableMenu;
                        buttonObject.transform.parent = terrain.transform;

                        //StartCoroutine(DownloadPlaces(queryURL));

                        //this.StartCoroutine(this.AddStreetAddress(GazeManager.Instance.Position));
                    }
                    break;

                case 2:
                    // Resume footprint/terrain movement.
                    if (!this._isMoving)
                    {
                        // Set moving flag for update method
                        this._isMoving = true;

                        // Make terrain hittest invisible
                        this.GetComponentInChildren <Terrain>().gameObject.layer = 2;

                        // Resume mapping observer
                        SpatialMappingManager.Instance.StartObserver();
                    }
                    break;
                }
            };



            this._gestureRecognizer.StartCapturingGestures();

            // Create terrain footprint.

            var footprint = GameObject.CreatePrimitive(PrimitiveType.Quad);

            footprint.name = "base";
            footprint.transform.position      = new Vector3(0, 0, 0);
            footprint.transform.localRotation = Quaternion.FromToRotation(
                new Vector3(0, 1, 0),
                new Vector3(0, 0, 1)
                );
            footprint.transform.localScale = new Vector3(SIZE, SIZE, 1f);
            footprint.layer            = 2; // Ignore Raycast
            footprint.transform.parent = this.transform;
        }