标签:
手势识别是HoloLens交互的重要输入方法之一。HoloLens提供了底层API和高层API,可以满足不同的手势定制需求。底层API能够获取手的位置和速度信息,高层API则借助手势识别器来识别预设的手势(包括,单击、双击、长按、平移等等)。
本部分为高级API使用,通过输入源来识别手势。每个手势对应一个SourceKind输入源,大部分手势事件都是系统预设的事件,有些事件会提供额外的上下文信息。
只需要很少的步骤就能使用GestureRecognizer集成手势识别:
private GestureRecognizer recognizer; // Use this for initialization void Start() { recognizer = new GestureRecognizer(); recognizer.SetRecognizableGestures(GestureSettings.Tap | GestureSettings.Hold); recognizer.HoldStartedEvent += Recognizer_HoldStartedEvent; recognizer.TappedEvent += Recognizer_TappedEvent;
//开始识别 recognizer.StartCapturingGestures(); } private void Recognizer_TappedEvent(InteractionSourceKind source, int tapCount, Ray headRay) { Debug.Log("Tap"); } private void Recognizer_HoldStartedEvent(InteractionSourceKind source, Ray headRay) { Debug.Log("hold"); } // Update is called once per frame void Update() { } void OnDestory() { recognizer.TappedEvent -= Recognizer_TappedEvent; recognizer.HoldStartedEvent -= Recognizer_HoldStartedEvent; }
停止手势识别
recognizer.StopCapturingGestures();
底层API运行获得输入来源的更多详细信息,例如它在世界中的位置和速度。
使用底层交互是很容易的:
停止它也很容易:
对于每种你需要的底层事件,你都需要去注册它
InteractionManager.SourcePressed += InteractionManager_SourcePressed;
一旦注册了底层交互事件,在事件发生时你就可以得到回调。你可以使用获取到的时间信息来处理应用行为。
void InteractionManager_SourcePressed(InteractionSourceState state) { // state变量里包含以下信息: // 当前凝视射线信息 // 来源是否被点击 // 位置、速度之类的属性 // 来源id和来源类型 (hand, voice, controller或其他) }
当你不再想要关注一些事件后,只需要取消时间注册即可。
InteractionManager.SourcePressed -= InteractionManager_SourcePressed;
这些事件描述了输入源的当前状态:
每个事件都会有一个InteractionSourceState参数,这个参数代表了实时输入源状态:
using UnityEngine.VR.WSA.Input; void Start () { InteractionManager.SourceDetected += InteractionManager_SourceDetected; InteractionManager.SourceUpdated += InteractionManager_SourceUpdated; InteractionManager.SourceLost += InteractionManager_SourceLost; InteractionManager.SourcePressed += InteractionManager_SourcePressed; InteractionManager.SourceReleased += InteractionManager_SourceReleased; } void OnDestroy() { InteractionManager.SourceDetected -= InteractionManager_SourceDetected; InteractionManager.SourceUpdated -= InteractionManager_SourceUpdated; InteractionManager.SourceLost -= InteractionManager_SourceLost; InteractionManager.SourcePressed -= InteractionManager_SourcePressed; InteractionManager.SourceReleased -= InteractionManager_SourceReleased; } void InteractionManager_SourceDetected(InteractionSourceState state) { // 识别到来源 } void InteractionManager_SourceLost(InteractionSourceState state) { //丢失来源 } void InteractionManager_SourceUpdated(InteractionSourceState state) { //来源被更新 } void InteractionManager_SourcePressed(InteractionSourceState state) { //来源被按下 } void InteractionManager_SourceReleased(InteractionSourceState state) { // 来源被松开 }
HoloLens开发手记 - Unity之Gestures手势识别
标签:
原文地址:http://www.cnblogs.com/mantgh/p/5497578.html