周框方塊 - MRTK2
腳本 BoundingBox.cs
提供在混合實境中轉換物件的基本功能。 周框方塊會顯示全像投影周圍的立方體,以指出它可以與其互動。 Cube 角落和邊緣上的控點允許縮放或旋轉物件。 周框方塊也會回應使用者輸入。 例如,在HoloLens 2上,周框方塊會回應手指鄰近性,提供視覺回饋來協助察覺物件的距離。 所有互動和視覺效果都可以輕鬆地自訂。
如需詳細資訊,請參閱 Windows 開發人員中心的 周框方塊和應用程式行 。
範例場景
您可以在場景中找到周框方塊組態的 BoundingBoxExamples
範例。
如何使用 Unity Inspector 新增和設定周框方塊
- 將 Box Collider 新增至物件
- 將腳本指派
BoundingBox
給物件 - 設定選項,例如「啟用」方法 (請參閱下方的 偵測器屬性 一節)
- (選擇性) 指派HoloLens 2樣式周框方塊的預製專案和材質 (請參閱下方的處理樣式一節)
注意
使用偵測器中的 [目標物件 和 系結覆寫] 欄位,在物件中指派具有多個子元件的特定物件和碰撞器。
如何在程式碼中新增和設定周框方塊
具現化 Cube GameObject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
使用 AddComponent <> () 將腳本指派
BoundingBox
給具有碰撞器的物件private BoundingBox bbox; bbox = cube.AddComponent<BoundingBox>();
設定選項 (請參閱下方的 偵測器屬性 一節)
// Make the scale handles large bbox.ScaleHandleSize = 0.1f; // Hide rotation handles bbox.ShowRotationHandleForX = false; bbox.ShowRotationHandleForY = false; bbox.ShowRotationHandleForZ = false;
(選擇性) 指派HoloLens 2樣式周框方塊的預製專案和材質。 這仍然需要透過偵測器指派,因為應該動態載入材質和預製專案。
注意
不建議使用 Unity 的 'Resources' 資料夾或 Shader.Find 來動態載入著色器,因為執行時間可能會遺漏著色器排列。
bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;
範例:使用 MinMaxScaleConstraint 設定最小、最大周框方塊小數位數
若要設定最小和最大小數位數,請使用 MinMaxScaleConstraint
。 您也可以使用 MinMaxScaleConstraint 來設定 的 ManipulationHandler
最小和最大小數位數。
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;
範例:在遊戲物件周圍新增周框方塊
若要在物件周圍新增周框方塊,只要將元件新增 BoundingBox
至物件即可:
private void PutABoxAroundIt(GameObject target)
{
target.AddComponent<BoundingBox>();
}
Inspector 屬性
目標物件
此屬性會指定周框方塊操作將轉換的物件。 如果未設定物件,周框方塊預設為擁有者物件。
界限覆寫
設定物件中的方塊碰撞器以進行界限計算。
啟用行為
有數個選項可啟動周框方塊介面。
- 啟動開始時:一旦啟動場景,周框方塊就會變成可見。
- 啟用 [近接:周框方塊] 會在已表達的手接近物件時變成可見。
- 依指標啟動:當周框方塊是以手部光線指標為目標時,就會變成可見的。
- 手動啟用:周框方塊不會自動顯示。 您可以透過腳本手動啟用它,方法是存取 boundingBox.Active 屬性。
小數位數下限
允許的最小小數位數。 這個屬性已被取代,最好是新增 MinMaxScaleConstraint
腳本。 如果新增此腳本,最小小數位數會取自它,而不是從周框方塊中取得。
縮放上限
允許的最大縮放比例。 這個屬性已被取代,最好是新增 MinMaxScaleConstraint
腳本。 如果新增此腳本,則會從它取用最大小數位數,而不是從周框方塊中取得。
方塊顯示
各種周框方塊視覺效果選項。
如果壓平軸設定為 [ 壓平自動],腳本將會不允許在座標軸上具有最小範圍進行操作。 這會導致 2D 周框方塊,這通常用於精簡物件。
處理
您可以指派材質和預製物件來覆寫控制碼樣式。 如果未指派任何控制碼,則會以預設樣式顯示它們。
事件
周框方塊提供下列事件。 此範例會使用這些事件播放音訊意見反應。
- 旋轉開始:旋轉開始時引發。
- 旋轉結束:旋轉結束時引發。
- 調整已啟動:調整開始時引發。
- 調整結束:調整結束時引發。
處理樣式
根據預設,當您剛指派腳本時 BoundingBox.cs
,它會顯示 HoloLens 第 1 代樣式的控制碼。 若要使用HoloLens 2樣式控點,您必須指派適當的控制碼預製專案和材質。
以下是HoloLens 2樣式周框方塊控點的預製專案、材質和縮放值。 您可以在場景中找到此範例 BoundingBoxExamples
。
處理HoloLens 2樣式) 的 (設定
- 控制碼材質:BoundingBoxHandleWhite.mat
- 控點抓取材質:BoundingBoxHandleBlueGrabbed.mat
- 調整控制碼預製物件:MRTK_BoundingBox_ScaleHandle.prefab
- 調整控制碼 Slate Prefab:MRTK_BoundingBox_ScaleHandle_Slate.prefab
- 調整控制碼大小:0.016 (1.6cm)
- 縮放控制碼碰撞器填補:0.016 (可抓取碰撞器稍微大於處理視覺效果)
- 旋轉控點預製物件:MRTK_BoundingBox_RotateHandle.prefab
- 旋轉控點大小:0.016
- 旋轉控點碰撞器填補:0.016 (讓可抓取碰撞器稍微大於控點視覺效果)
HoloLens 2樣式) 的鄰近 (設定
根據手部的距離,顯示並隱藏具有動畫的控點。 它有雙步驟縮放動畫。
- 近接效果作用中:啟用近接式控制碼啟用
- 處理中型鄰近性:第 1 個步驟縮放的距離
- 處理鄰近性:第 2 個步驟縮放的距離
- 遠距小數位數:當手部超出周框方塊互動的範圍時,處理資產的預設縮放值 (由「處理中鄰近性」所定義的距離。預設使用 0 隱藏控制碼)
- 中小數位數:當手部位於周框方塊互動的範圍內時,控點資產的縮放值 (由「處理鄰近性」所定義的距離。使用 1 顯示一般大小)
- 關閉小數位數:當手部位於上方定義的抓取互動範圍內時,控點資產的縮放值 (由「處理鄰近性」所定義的距離。使用 1.x 顯示較大的大小)
使用操作處理常式讓物件可移動
周框方塊可以與 ManipulationHandler.cs
結合,讓物件使用遠距互動來移動。 操作處理常式同時支援一個和雙手互動。
手部追蹤 可用來與物件互動。
若要讓周框方塊邊緣在使用 ManipulationHandler
遠距互動移動時的行為相同,建議您分別連接其 On Manipulation Started / On Manipulation 已結束BoundingBox.HighlightWires
/ BoundingBox.UnhighlightWires
的事件,如上述螢幕擷取畫面所示。
移轉至界限控制項
使用 周框方 塊的現有預製專案和實例可以透過屬於 MRTK 工具套件的 移轉視窗 升級至新的界限控制項。
若要升級周框方塊的個別實例,元件的屬性偵測器內也有移轉選項。