Hololens API解析Input-GestureRecognizer

命名空间UnityEngine.VR.WSA.Input
使用API来识别用户动作的管理类。
GestureRecognizer
Hololens手势识别,完成点击,拖拽等操作。

构造函数

GestureRecognizer

创建一个手势识别器。

公共函数

CancelGestures

取消任何挂起的手势事件。此外,这将调用StopCapturingGestures

Dispose

释放手势识别器所使用的资源。

GetRecognizableGestures

获取当前启用的手势的一个mask。

IsCapturingGestures

用于查询手势是否正在接收手势事件。

SetRecognizableGestures

将可识别的手势设置为newMaskValues中指定的,并返回旧的设置。

StartCapturingGestures

开始接收手势事件。在调用此方法之前,不会收到任何事件。

StopCapturingGestures

停止接收手势事件。

事件

GestureErrorEvent

当手势识别器发出警告或错误时,就会被触发。

HoldCanceledEvent

当用户使用他们的手或语言进行取消事件时,就会被触发。

HoldCompletedEvent

当用户完成一个手势时,就会被触发。

HoldStartedEvent

当用户开始持有手势时,就会被触发。

ManipulationCanceledEvent

当操作手势被取消时,就会被触发。

ManipulationCompletedEvent

当操作手势被完成时,就会被触发。

ManipulationStartedEvent

当交互成为一个操作手势时,就会被触发。

ManipulationUpdatedEvent

当操作手势因手移动而更新时,就会被触发。

当导航手势取消时,就会被触发。

当导航手势完成时,就会被触发。

当导航手势开始时,就会被触发。

当导航手势更新时,就会被触发。

RecognitionEndedEvent

当操作手势因手移动而更新时,就会被触发。

RecognitionStartedEvent

当手势识别完成时,或者手势完成或取消时,就会被触发。

TappedEvent

当出现点击手势时,就会被触发。

委托

GestureErrorDelegate

回调表示出现错误或警告

HoldCanceledEventDelegate

回调表示一个Hold取消事件。

HoldCompletedEventDelegate

回调表示一个Hold完成事件。

HoldStartedEventDelegate

回调表示一个Hold开始事件。

ManipulationCanceledEventDelegate

回调表示一个操作取消事件。

ManipulationCompletedEventDelegate

回调表示一个操作完成事件。

ManipulationStartedEventDelegate

回调表示一个操作开始事件。

ManipulationUpdatedEventDelegate

回调表示一个操作更新事件。

回调表示一个导航取消事件。

回调表示一个导航完成事件。

回调表示一个导航开始事件。

回调表示一个导航更新事件。

RecognitionEndedEventDelegate

回调表示手势事件已经完成。

RecognitionStartedEventDelegate

回调表示手势事件已经开始。

TappedEventDelegate

回调指示一个点击事件。


下面的代码完成GestureRecognizer的初始化设置及事件的注册和注销

using UnityEngine.VR.WSA.Input;
public class GesturesInput: MonoBehaviour{
//手势识别管理器,手势和导航不兼容,各自需要一个
 GestureRecognizer gestureRecognizer;
 GestureRecognizer navigationGestureRecognizer;
//第一个是让识别器立即启动。第二个允许识别器在稍后的时候手动启动。
 public enum RecognizerStartBehavior { AutoStart, ManualStart };
 void Start()
 {
            gestureRecognizer = new 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(GestureSettings.Tap | 
                                                      GestureSettings.ManipulationTranslate |
                                                      GestureSettings.Hold);
             navigationGestureRecognizer = new GestureRecognizer();
            //注册导航事件
            navigationGestureRecognizer.NavigationStartedEvent += OnNavigationStartedEvent;
            navigationGestureRecognizer.NavigationUpdatedEvent += OnNavigationUpdatedEvent;
            navigationGestureRecognizer.NavigationCompletedEvent += OnNavigationCompletedEvent;
            navigationGestureRecognizer.NavigationCanceledEvent += OnNavigationCanceledEvent;  
             if (UseRailsNavigation)//使用Rails导航
            {
                navigationGestureRecognizer.SetRecognizableGestures(GestureSettings.NavigationRailsX |
                                                                    GestureSettings.NavigationRailsY |
                                                                    GestureSettings.NavigationRailsZ);
            }
            else//使用3D导航
            {
                navigationGestureRecognizer.SetRecognizableGestures(GestureSettings.NavigationX |
                                                                    GestureSettings.NavigationY |
                                                                    GestureSettings.NavigationZ);
            }

            if (RecognizerStart == RecognizerStartBehavior.AutoStart)
            {
                //开始捕捉操和导航手势
                gestureRecognizer.StartCapturingGestures();
                navigationGestureRecognizer.StartCapturingGestures();
            }                                                    
 }      

       void OnDestroy()
        {
            //关闭手势捕捉
            StopGestureRecognizer();
            //注销事件,释放资源
            if (gestureRecognizer != null)
            {
                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.Dispose();
            }
            if (navigationGestureRecognizer != null)
            {
                navigationGestureRecognizer.NavigationStartedEvent -= OnNavigationStartedEvent;
                navigationGestureRecognizer.NavigationUpdatedEvent -= OnNavigationUpdatedEvent;
                navigationGestureRecognizer.NavigationCompletedEvent -= OnNavigationCompletedEvent;
                navigationGestureRecognizer.NavigationCanceledEvent -= OnNavigationCanceledEvent;

                navigationGestureRecognizer.Dispose();
            }
        }

      void OnDisable()
        {
            StopGestureRecognizer();
        }

       void OnEnable()
        {
            if (RecognizerStart == RecognizerStartBehavior.AutoStart)
            {
                StartGestureRecognizer();
            }
        }
        // 开始手势识别(在没有捕捉的状态下)
        public void StartGestureRecognizer()
        {
            if (gestureRecognizer != null && !gestureRecognizer.IsCapturingGestures())
            {
                gestureRecognizer.StartCapturingGestures();
            }
            if (navigationGestureRecognizer != null && !navigationGestureRecognizer.IsCapturingGestures())
            {
                navigationGestureRecognizer.StartCapturingGestures();
            }
        }

        //关闭手势识别(在捕捉手势的状态下)
        public void StopGestureRecognizer()
        {
            if (gestureRecognizer != null && gestureRecognizer.IsCapturingGestures())
            {
                gestureRecognizer.StopCapturingGestures();
            }
            if (navigationGestureRecognizer != null && navigationGestureRecognizer.IsCapturingGestures())
            {
                navigationGestureRecognizer.StopCapturingGestures();
            }
        }
}


手势事件的回调方法在下个章节讲解,敬请关注!

发布了31 篇原创文章 · 获赞 51 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章