命名空間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();
}
}
}
手勢事件的回調方法在下個章節講解,敬請關注!