周框方塊 - MRTK2

週框方塊

注意

周框方塊已被取代,並由其後續 界限控制項取代。 使用 其中一個移轉選項 來升級現有的遊戲物件。

腳本 BoundingBox.cs 提供在混合實境中轉換物件的基本功能。 周框方塊會顯示全像投影周圍的立方體,以指出它可以與其互動。 Cube 角落和邊緣上的控點允許縮放或旋轉物件。 周框方塊也會回應使用者輸入。 例如,在HoloLens 2上,周框方塊會回應手指鄰近性,提供視覺回饋來協助察覺物件的距離。 所有互動和視覺效果都可以輕鬆地自訂。

如需詳細資訊,請參閱 Windows 開發人員中心的 周框方塊和應用程式行

範例場景

您可以在場景中找到周框方塊組態的 BoundingBoxExamples 範例。

周框方塊範例

如何使用 Unity Inspector 新增和設定周框方塊

  1. 將 Box Collider 新增至物件
  2. 將腳本指派 BoundingBox 給物件
  3. 設定選項,例如「啟用」方法 (請參閱下方的 偵測器屬性 一節)
  4. (選擇性) 指派HoloLens 2樣式周框方塊的預製專案和材質 (請參閱下方的處理樣式一節)

注意

使用偵測器中的 [目標物件系結覆寫] 欄位,在物件中指派具有多個子元件的特定物件和碰撞器。

周框方塊 1

如何在程式碼中新增和設定周框方塊

  1. 具現化 Cube GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. 使用 AddComponent <> () 將腳本指派 BoundingBox 給具有碰撞器的物件

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. 設定選項 (請參閱下方的 偵測器屬性 一節)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (選擇性) 指派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

HandStyles 2

處理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 工具套件的 移轉視窗 升級至新的界限控制項。

若要升級周框方塊的個別實例,元件的屬性偵測器內也有移轉選項。

界限控制項移轉