手部指導 - MRTK2
手部指導是 3D 模型化手部,當系統未偵測到使用者的手部時觸發。 這會實作為「教學」元件,以協助在未教導手勢時引導使用者。 如果使用者未在一段時間內完成指定的手勢,則手部會以順延強制迴圈。 手部指導可用來代表按下按鈕或挑選全像投影。
目前的互動模型代表各種不同的手勢控制項,例如捲動、遠距選取,以及接近點選。 以下是現有手部指導範例的完整清單:
- 近點選 – 用於按鈕或關閉可互動的物件
- 遠距選取 – 用於離遠的物件
- 移動 – 用來在空間中移動全像投影
- 旋轉 – 用來顯示如何旋轉全像投影或物件
- 縮放 – 用來示範如何操作全像投影,以放大或縮小
- 手翻轉 – 用於啟動 UI 開始面板或手部功能表
- 手部向上 – 用於現用體驗中的冷氣bird 時刻。 另一個建議可能是啟動 UI 啟動面板
- 捲動 – 用於捲動清單或長檔
範例場景
您可以在 HandCoachExample 場景中找到範例: MixedRealityToolkit.Examples/Experimental/HandCoach/Scenes
手部 3D 資產
您可以在下列位置找到資產: MixedRealityToolkit.SDK/Experimental/HandCoach
品質
如果您注意到外觀網格上的扭曲,您必須確定您的專案使用適當的接合量。 移至 Unity 的 [編輯 > 專案設定 > 品質 > ] [其他 > 混合權數]。 確定已選取 [4 個骨頭] 以查看 Smooth Joints。
指令碼
互動提示
腳本 InteractionHint.cs
提供觸發動畫的包裝函式功能,並淡出手部鑽研。
如何設定互動提示
若要設定互動提示,建議使用提供的預製專案 「StaticHandCoachRoot_L.prefab」 和 「StaticHandCoachRoot_R.prefab」。 此預製專案包含 InteractionHint 腳本和手部設備,以及適當的階層,以確保提供的提示動畫如預期般運作。 否則,您必須使用動畫工具,將腳本放在 gameObject 上一個父層級上。
Inspector 屬性
HideIfHandTracked 此布林值會指定在追蹤使用者的手部時,是否應該使用手部追蹤狀態來隱藏視覺效果。 如果這設定為 false,則只會使用腳本屬性 「customShouldHideVisuals」 來判斷是否要隱藏提示。
MinDelay 此屬性會指定顯示視覺效果的最小延遲。 根據預設,如果使用者的手部未受到追蹤,則手部的視覺效果會出現在這多秒之後。
MaxDelay 此屬性會指定顯示視覺效果的最大延遲。 根據預設,即使正在追蹤使用者的手部,手部的視覺效果也會出現在這多秒之後。
UseMaxTimer 如果此布林值設定為 false,則會停用最大計時器,並且只允許在使用者手部離開檢視時顯示手部提示,或自訂條件傳回 false。
重複 此屬性會控制在最小或最大計時器通過時,提示動畫播放的次數。 提示接著會隱藏並再次等候延遲。
AutoActivate 當此布林值設定為 true 時,當腳本的 GameObject 在階層中使用且啟用腳本時,提示會自動執行計時器邏輯。 如果您打算透過程式碼手動控制提示外觀和回應,則這應該設定為 false。
AnimationState 提示作用中時應該播放的動畫狀態名稱。 如果) 檢查 AutoActivate,則必須在 OnEnable 期間呼叫 StartHintLoop () 函式 (。
透過腳本控制 InteractionHint
- StartHintLoop 如果 AutoActivate 旗標設定為 true,此函式會啟動 Show/hide 迴圈,否則會啟動 OnEnable。
- StopHintLoop 如果目前未播放,此函式會呼叫淡出動畫狀態,然後會停用顯示/隱藏迴圈,並在階層中設定手部鑽機非作用中。
- AnimationState 此字串會決定迴圈期間播放的動畫狀態。 您可以變更此字串來變更播放的狀態,但在呼叫 StopHintLoop 之後必須這麼做,而且您必須在變更狀態之後再次呼叫 StartHintLoop。
- CustomShouldHideVisuals 您可以使用自己的函式來設定此值,當您想要隱藏手部視覺效果時,應該傳回 true (請記住 MinMaxTimer,特別是 max 參數)
自訂動畫考慮
淡化預設為 0.5 秒,因此為了與鑽機一起使用而建立的任何自訂動畫,至少應為 1.5 秒,才能傳達任何有意義的資訊
提供的預設淡入和淡出狀態,Fade_In和Fade_Out可以藉由變更第二個主要畫面格的時間戳記來設定淡出長度來調整。
動畫程式和腳本的設定方式應該盡可能簡單。 若要新增動畫狀態,只要匯入您的 fbx,請確定動畫名稱已設定為不同的名稱,然後將該動畫拖曳至動畫。
MoveToTarget
MoveToTarget.cs 腳本提供將手部提示從追蹤位置移至一段時間的目標位置的功能。
如何設定 MoveToTarget
提供的 prefabs 「MovingHandCoachRoot_L.prefab」 和 「MovingHandCoachRoot_R.prefab」 在其階層中包含 MoveToTarget。 如果您想要在自己的設定上使用這個腳本,您必須將它放在包含您鑽機之 Animator 的根遊戲物件上。
Inspector 屬性
- TrackingObject 使用您想要在啟動其動作之前追蹤的物件來設定此專案。 建議您建立空的 GameObject,並將它移至特定位置,以協助您找出追蹤。
- TargetObject 使用您希望鑽機在其動作期間移至的物件來設定此專案。 建議您建立空的 GameObject,並將它移至特定位置,以協助您找出追蹤。
- RootObject 將此設定為追蹤和目標物件之間的共用父代,以便正確計算相對位置。 包含的預製物件在其階層中都有追蹤和目標物件,但您可以將目標物件設定為 prefab 外部的 gameObject,並將根物件變更為共用父代。
- 時間) 從 TrackingObject 移至 TargetObject 所需花費的時間,以秒為單位 (。
- TargetOffset 無法位移,可讓 GameObject 到達正確的目標位置。 如果您的動畫包含動畫期間的位置位移,這會很有用。
- AnimationCurve 這預設為線性曲線,但您可以改變曲線,以在開始和停止移動路徑時提供 Easing in/out。
透過腳本控制 MoveToTarget
在您的自訂腳本中,呼叫 Follow () ,同時您想要讓手部遵循 TrackingObject,然後在您想要讓手部開始對 TargetObject 的動作時呼叫 MoveToTargetPosition () 。
透過動畫控制 MoveToTarget
在需要移動的動畫中,設定兩個事件:一個呼叫 Follow () ,另一個是呼叫 MoveToTargetPosition () 。 應該在第一個主要畫面格上設定 Follow,因為它會導致手部鑽機追蹤您的 TrackingObject。 MoveToTargetPosition 應該設定在您希望鑽機開始移至目標的主要畫面格上。 這是在提供的預製專案中使用腳本功能的方式。
RotateAroundPoint
RotateAroundPoint.cs 腳本提供在一段時間內繞著樞紐點旋轉手部提示的功能。
如何設定 RotateAroundPoint
提供的 prefabs 「RotatingHandCoachRoot_L.prefab」 和 「RotatingHandCoachRoot_R.prefab」 在其階層中包含 RotateAroundPoint。 如果您想要在自己的設定上使用這個腳本,您必須將它放在包含您鑽機之 Animator 的根遊戲物件上。
Inspector 屬性
- CenteredParent 使用您想要讓鑽研器四處樞紐的父物件來設定此專案。
- InverseParent 使用父系將此設定為反轉為 centeredParent,以便讓手部方向保持相同。 一般而言,這會是其上具有 InteractionHint 腳本的父物件。
- PivotPosition 將此設定為您想要提示開始移動的位置。
- 時間 在 CenteredParent 周圍旋轉) , (所花費的時間量。
- AnimationCurve 這預設為線性曲線,但您可以改變曲線,以在開始和停止移動路徑時提供 Easing in/out。
- RotationVector 沿著每個軸旋轉多少度數。
透過腳本控制 RotateAroundPoint
在自訂腳本中,當您想要讓手部開始繞 CenteredParent 旋轉時,請呼叫 RotateToTarget () 。 當您想要將位置重設為原始 PivotPosition 時,請呼叫 ResetAndDeterminePivot () 。
透過動畫控制 RotateAroundPoint
在需要移動的動畫中,設定兩個事件:一個呼叫 ResetAndDeterminePivot () ,另一個具有 RotateToTarget () 的呼叫。 ResetAndDeterminePivot 應該在第一個主要畫面格上設定,因為它會導致手部鑽機重設為 PivotPosition。 RotateToTarget 應該設定在要讓鑽架開始繞 CenteredParent 旋轉的主要畫面格上。 這是腳本功能在提供的預製專案中使用的方式。