練習 - 使用界限控制項操作 3D 物件

已完成

腳本 ObjectManipulator 會使用一或兩隻手讓對象可移動、可調整及旋轉。 此腳本支援直接作輸入模型,因為它可讓使用者直接用手觸控全像投影。 在這裡,使用 ObjectManipulator 來啟用手部互動,以便您可以移動、縮放及旋轉漫遊車。

  1. 此外,您將設定 Rover Explorer,讓您可以將 Rover 零件放在 Rover 上,使其成為完整的 Rover 組件。 在 [階層] 窗格中,展開 [RoverExplorer >RoverParts ] 對象,然後選取其所有子 rover 元件物件和 RoverAssembly 對象,然後在 [偵測器] 窗格中,使用 [ 新增元件 ] 按鈕,將下列元件新增至所有選取的物件:

    • 物件操縱器(腳本) 元件
    • 零件組裝控制器(腳本) 元件

    RoverAssembly 的螢幕快照,其中已選取所有 rover 元件物件並新增元件。

  2. 在仍然選取所有 rover 部件物件和 RoverAssembly 物件的情況下,在檢查器窗格中,將 物件操作器(腳本) 元件設定如下:

    • 在 [基礎 Interactable 設定] 下,找出 On Clicked () 事件。 選取 + 圖示以新增新事件。 設定事件,如下所示:

      一。 藉由將 RoverAssembly 物件從 [階層] 拖曳至 [無 (物件)] 欄位,將其指派為 [On Clicked ()] 事件的接聽程式。

      b。 從 [沒有函式] 下拉式清單中選取 [TapToPlace]>[StartPlacement()],以在事件觸發時呼叫此方法。

    • 允許的操作類型 下拉式清單中,取消選取 縮放 複選框,因此只會啟用 移動旋轉

    配置為雙手操作類型的 Unity 螢幕截圖。

  3. 只選擇 RoverAssembly 物件,並移除其上的 具狀態互動 元件(如果有的話)。 選取元件最右邊的三個點,然後選取 [移除元件]。

  4. 在 [專案] 窗格中,流覽至 [ 套件>MRTK 標準資產>音訊>HoloLens2 ] 資料夾以找出音訊剪輯:

    已選取 [音訊] 資料夾的 Unity 專案視窗螢幕快照。

  5. 在 [階層] 窗格中,重新選取所有 rover 元件對象,然後在 [偵測器] 窗格中,選取 [ 新增元件 ] 以新增 音訊來源 元件,並將其設定如下:

    • MRTK_Scale_Start 音訊剪輯指派給 AudioClip 字段。
    • 取消核取 [ 在喚醒時播放 ] 複選框。
    • 空間混合 變更為 1

    Unity 的螢幕快照,其中已選取所有 rover 元件,以及已新增和設定音訊來源元件。

  6. 在 [階層] 窗格中,展開 RoverAssembly>RoverModel_PlacementHints_XRray>Parts_PlacementHints 物件以顯示所有放置提示對象,然後選取第一個 rover 部件RoverParts>Camera_Part,並設定 元件控制器 (腳本) 元件,如下所示:

    • Camera_PlacementHint 物件指派給 放置的位置 欄位。

    已設定 Camera_Part PartAssemblyController 元件的 Unity 螢幕快照。

  7. 針對 其餘的 rover 元件物件和 RoverAssembly 物件重複步驟 5,以設定 元件元件控制器 (腳本) 元件,如下所示:

    • 針對 Generator_Part,將 Generator_PlacementHint物件 指派給 位置放置 字段。
    • 針對 Lights_Part,將 Lights_PlacementHint 物件 指派給 放置位置 字段。
    • 針對 UHFAntenna_Part,將 UHFAntenna_PlacementHint 物件 指派給 待放置位置 欄位。
    • 針對 Spectrometer_Part,將 Spectrometer_PlacementHint 物件指派給 [放置位置] 字段。
    • 針對 RoverAssembly,將物件本身,也就是相同的 RoverAssembly 物件指派給 放置位置 字段。
  8. 在 [階層] 窗格中,選取 [RoverExplorer Buttons >>] 按鈕對象,然後在 [偵測器] 窗格中,設定 PressableButton.OnClicked () 事件,如下所示:

    • RoverAssembly 物件指派給 [無] (物件) 字段。
    • 從 [ 無函式 ] 下拉式清單中,選取 PartAssemblyController>ResetPlacement () 將此函式設定為觸發事件時要執行的動作。

    已設定 [重設] 按鈕物件 OnClick 事件的 Unity 螢幕擷取畫面。

  9. 如果您現在進入遊戲模式,您可以使用近或遠的互動將 Rover 零件放在 Rover 上。 一旦組件接近相對應的放置提示,就會貼齊至固定位置,並成為 Rover 的一部分。 若要重設位置,您可以按 [重設] 按鈕:

    Unity 遊戲模式分割檢視的螢幕擷取畫面,其中已按下 [重設] 按鈕。

新增界限控件

  1. 在 [階層] 視窗中,選取 RoverExplorer 對象,然後在 [偵測器] 視窗中,使用 [ 新增元件 ] 按鈕來新增 BoundsControl 元件。 取消勾選 於元件旁的複選框,以預設停用該元件。

    Unity 螢幕快照,已選取 RoverExplorer 物件,並且元件已新增與停用。

  2. 在 [專案] 視窗中,瀏覽至 [套件]>[MRTK 空間操作]>[BoundsControl]>[Prefabs] 資料夾,然後按住並拖曳 BoundingBoxWithHandles 預製物件至 [界限控制項] 元件的 [界限視覺效果預製物件] 欄位。

    已選取 [RoverExplorer] 物件,且已設定 [界限視覺效果預製物件] 欄位的 Unity 螢幕擷取畫面。

  3. 在 [階層] 窗格中,展開 [ 功能表> ]Buttons-GridLayout [按鈕] 物件,以顯示三個按鈕。 將第三個按鈕重新命名為 BoundsControl_Enable,然後在 [階層] 視窗中,設定 BoundsControl_Enable 遊戲物件,如下所示:

    • 選取 Frontplate > AnimatedContent > Icon > Label 物件,並將 TextMeshPro 元件變更為 [啟用]。 請確定 Label 物件已在階層中啟動。
    • RoverExplorer 物件指派給 None (Object) 字段,然後從 沒有函式 下拉式清單中選取 BoundsControl>bool Enabled 來設定 PressableButton.OnClicked 事件(確認 自變數 複選框 已勾選)。
    • 選取小 + 圖示以新增另一個事件。
    • RoverExplorer 物件指派給 None (Object) 字段。
    • 從 [否函式] 下拉式清單中,選取 [ObjectManipulator>bool Enabled] 以在觸發事件時更新這個屬性值,並確認已核取自變數複選框。
    • 選取小 + 圖示以新增另一個事件。
    • RoverExplorer 物件指派給 None (Object) 字段。
    • 從 [無函式] 下拉式清單中,選取 [BoundsControl>bool HandlesActive],以在觸發事件時更新這個屬性值,並確認已核取自變數複選框。
    • 選取 Frontplate > AnimatedContent > 圖示 > UIButtonFontIcon 物件,並將 圖示 變更為 字型圖示選取器 元件上的四向箭頭圖示。 您可以在圖示清單中找到此專案,或將 [目前圖示名稱 ] 設定為 [圖示 40]。

    已選取 [BoundsControl_Enable] 按鈕物件,且已設定 [按鈕設定協助程式] 元件的 Unity 螢幕擷取畫面。

  4. 複製 BoundsControl_Enable 按鈕,並將它重新命名為 BoundsControl_Disable,然後在 [偵測器] 窗格中,設定 [按鈕設定協助程式][腳本] 元件,如下所示:

    • 選取 Frontplate > AnimatedContent > Icon > Label 物件,並將 TextMeshPro 元件變更為 Disable
    • 確定事件下的所有核取方塊皆未核取,以設定 PressableButton.OnClicked() 事件。

    已選取 [BoundsControl_Disable] 按鈕物件,且已設定 [按鈕設定協助程式] 元件的 Unity 螢幕擷取畫面。

  5. 如果您現在進入遊戲模式並選取 [ 啟用 ] 以啟用界限控件,您可以使用近或遠距離的互動來移動、旋轉及調整界限控件,然後選取 [ 停用 ] 以再次停用界限控件:

    Unity 遊戲模式分割檢視的螢幕擷取畫面,其中正在操作邊界控制。