條件約束 — MRTK3
ConstraintManager
可讓您將一組條件約束元件套用至轉換。 根據預設,條件約束管理員會自動收集所有附加 的條件約束元件 ,並將其套用至目標物件。 不過,使用者也可以選擇手動設定套用的條件約束清單,而且只允許使用附加條件約束的子集。
注意
MRTK3 目前提供來自 MRTK 2.x 的限制子集。 我們目前正在調查條件約束系統的重構,以將開發人員工作流程與解算器和彈性整合。 敬請期待!
目前,下列 MRTK UX 元素支援條件約束:
條件約束管理員可以兩種模式運作:
- 自動條件約束選取
- 手動條件約束選取
條件約束選取
自動條件約束選取
預設 的 [自動] 模式會列出所有附加的條件約束元件。 您可以使用 [ 移至元件 ] 按鈕,或從下拉式清單中新增條件約束,直接跳至偵測器中的元件。
手動條件約束選取
如果條件約束管理員設定為手動模式,則只會處理條件約束清單中連結的條件約束,並套用至轉換。 第一次啟用手動模式時,管理員會自動填入清單,其中包含所有目前附加的條件約束。
注意
[移除專案] 動作只會從手動選取清單中移除條件約束。 元件仍會出現在 GameObject 上。
執行順序
每個條件約束的執行順序可以在條件約束本身的 [執行順序 ] 選項中定義。 順序將會反映在條件約束管理員中顯示的清單中。 有些條件約束會以不同的順序組合時有不同的行為,因此請記住每個條件約束的優先順序,並據以調整其順序。
轉換條件約束
您可以使用條件約束,以某種方式限制操作。 例如,某些應用程式可能需要旋轉,而且物件保持直立。 在此情況下, RotationAxisConstraint
可以將 新增至 物件,並用來將旋轉限制為 Y 軸旋轉。 MRTK 提供數個條件約束,如下所述。
您也可以定義新的條件約束,並使用這些條件約束來建立某些應用程式可能需要的唯一操作行為。 若要這樣做,請建立繼承自 TransformConstraint
的腳本,並實作抽象 ConstraintType
屬性和抽象 ApplyConstraint
方法。 新的條件約束應該會出現在下拉式清單中,而且應該在新增至 物件時自動在條件約束管理員中註冊。
MRTK 提供的所有條件約束都會共用下列屬性:
手部類型 會指定條件約束是用於單手、雙手或兩種操作。 因為這個屬性是旗標,所以可以選取這兩個選項。
- 單手操作:如果選取,則會在單手操作期間使用條件約束。
- 雙手:如果選取,則會在雙手操作期間使用條件約束。
ProximityType 會指定條件約束是用於近、遠或兩種操作。 因為這個屬性是旗標,所以可以選取這兩個選項。
- Near:如果選取,則會在接近操作期間使用條件約束。
- Far:如果選取,則會在遠距操作期間使用條件約束。
FaceUserConstraint
此條件約束會限制物件的旋轉,使其一律會面對使用者。 [ 離開臉部] 選項可控制是否使用正向或負 Z 軸。
FixedDistanceConstraint
此條件約束會修正操作開始時操作物件與另一個物件轉換之間的距離。 這適用于修正從操作物件到頭部轉換之間的距離等行為。 條件約束轉換欄位預設為相機轉換,而且是操作物件將有固定距離的其他轉換。
MaintainApparentSizeConstraint
當這個條件約束附加至物件時,無論物件與使用者有多遠,它都會維持與使用者相同的明顯大小 (亦即,它會佔用使用者檢視) 的相同比例。 這可用來確保 Slate 或文字面板在操作時保持可讀取狀態。
MoveAxisConstraint
此條件約束可用來修正操作物件可以移動的座標軸。 這適用于在平面表面或沿著線條操作物件。
[ 移動條件約束] 欄位會指定要防止移動的座標軸。 根據預設,這些軸會是全域軸,而不是本機軸,但可以變更如下。 因為這個屬性是旗標,所以可以選取任意數目的選項。
MinMaxScaleConstraint
此條件約束會限制物件的縮放,有助於防止使用者將物件調整為小型或大型大小。 它適用于具有 BoundsControl) 的控制碼型調整 (,以及搭配 ObjectManipulator) 的雙手直接縮放 (。 [相對於初始狀態] 選項會定義特定的Minimum和Maximum scale值是否為絕對值,或是否乘以物件的初始小數位數。
RotationAxisConstraint
此條件約束可用來修正可旋轉操作物件的座標軸。 這很適合用來讓操作的物件保持直立,但仍允許 Y 軸旋轉,例如。
旋轉欄位的條件約束會指定要防止旋轉的軸。 根據預設,這些軸會是全域軸,而不是本機軸,但可以變更如下。 因為這個屬性是旗標,所以可以選取任意數目的選項。