命名空间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
当操作手势因手移动而更新时,就会被触发。
NavigationCanceledEvent
当导航手势取消时,就会被触发。
NavigationCompletedEvent
当导航手势完成时,就会被触发。
NavigationStartedEvent
当导航手势开始时,就会被触发。
NavigationUpdatedEvent
当导航手势更新时,就会被触发。
RecognitionEndedEvent
当操作手势因手移动而更新时,就会被触发。
RecognitionStartedEvent
当手势识别完成时,或者手势完成或取消时,就会被触发。
TappedEvent
当出现点击手势时,就会被触发。
委托
GestureErrorDelegate
回调表示出现错误或警告
HoldCanceledEventDelegate
回调表示一个Hold取消事件。
HoldCompletedEventDelegate
回调表示一个Hold完成事件。
HoldStartedEventDelegate
回调表示一个Hold开始事件。
ManipulationCanceledEventDelegate
回调表示一个操作取消事件。
ManipulationCompletedEventDelegate
回调表示一个操作完成事件。
ManipulationStartedEventDelegate
回调表示一个操作开始事件。
ManipulationUpdatedEventDelegate
回调表示一个操作更新事件。
NavigationCanceledEventDelegate
回调表示一个导航取消事件。
NavigationCompletedEventDelegate
回调表示一个导航完成事件。
NavigationStartedEventDelegate
回调表示一个导航开始事件。
NavigationUpdatedEventDelegate
回调表示一个导航更新事件。
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();
}
}
}
手势事件的回调方法在下个章节讲解,敬请关注!