手部指導 - 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 旋轉的主要畫面格上。 這是腳本功能在提供的預製專案中使用的方式。