Övning – Manipulera 3D-objekt med hjälp av gränskontroll

Slutförd

ObjectManipulator-skriptet gör ett objekt flyttbart, skalbart och roterbart med en eller två händer. Det här skriptet stöder indatamodellen för direkt manipulation eftersom det gör det möjligt för användaren att röra hologram direkt med händerna. Här använder du ObjectManipulator för att aktivera handinteraktioner så att du kan flytta, skala och rotera roverutforskaren.

  1. Dessutom konfigurerar du Rover Explorer så att du kan placera roverdelarna på Rover för att göra den till en komplett rovermontering. I fönstret Hierarki expanderar du roverexplorer >RoverParts-objektet och markerar alla dess underordnade roverdelsobjekt och RoverAssembly-objektet . I fönstret Kontroll använder du sedan knappen Lägg till komponent för att lägga till följande komponenter i alla markerade objekt:

    • Komponent för objektmanipulatör (skript)
    • Komponent för delmonteringskontrollant (skript)

    Screenshot of RoverAssembly with all rover part objects selected and components added.

  2. När alla roverdelsobjekt och RoverAssembly-objektet fortfarande är markerade, konfigurerar du komponenten Object Manipulator (Script) i fönstret Inspector enligt följande:

    • Under Base Interactable Inställningar letar du reda på händelsen På klickad (). + Välj ikonen för att lägga till en ny händelse. Konfigurera händelsen enligt följande:

      a. Tilldela RoverAssembly-objektet som lyssnare för händelsen Klickad () genom att dra det från hierarkin till fältet Inget (objekt).

      b. I listrutan Ingen funktion väljer du TapToPlace>StartPlacement() för att anropa den här metoden när händelsen utlöses.

    • I listrutan Tillåten manipulationstyp avmarkerar du kryssrutan Skala, så endast Flytta och Rotera är aktiverade:

    Screenshot of Unity with Two Handed Manipulation Type configured.

  3. Välj endast RoverAssembly-objektet och ta bort komponenten Stateful Interactable på det, om det finns en. Välj de tre punkterna längst till höger i komponenten och välj sedan Ta bort komponent.

  4. I projektfönstret går du till Mappen Packages>MRTK Standard Assets>Audio>HoloLens2 för att hitta ljudklippen:

    Screenshot of Unity Project window with Audio folder selected.

  5. I fönstret Hierarki avmarkerar du alla roverdelsobjekt igen och i fönstret Kontroll väljer du Lägg till komponent för att lägga till komponenten Ljudkällor och konfigurerar den på följande sätt:

    • Tilldela MRTK_Scale_Start ljudklipp till fältet AudioClip
    • Avmarkera kryssrutan Spela upp på vaken
    • Ändra rumslig blandning till 1

    Screenshot of Unity with all rover parts selected and Audio Source component added and configured.

  6. I fönstret Hierarki expanderar du RoverAssembly-RoverModel_PlacementHints_XRay Parts_PlacementHints objekt för att visa alla placeringstipsobjekt, väljer sedan den första roverdelen, RoverParts >Kamera_Part och konfigurerar komponenten Part Assembly Controller (Script) på följande sätt:>>

    • Tilldela Kamera_PlacementHint-objektet till fältet Plats att placera

    Screenshot of Unity with Camera_Part PartAssemblyController component configured.

  7. Upprepa steg 5 för vart och ett av de återstående roverdelsobjekten och RoverAssembly-objektet för att konfigurera komponenten Part Assembly Controller (Script) enligt följande:

    • För Generator_Part tilldelar du Generator_PlacementHint-objektet till fältet Plats att placera
    • För Lights_Part tilldelar du Lights_PlacementHint-objektet till fältet Plats att placera
    • För UHFAntenna_Part tilldelar du UHFAntenna_PlacementHint-objektet till fältet Plats att placera
    • För Spectrometer_Part tilldelar du Spectrometer_PlacementHint-objektet till fältet Plats att placera
    • För RoverAssembly tilldelar du själva objektet, det vill: samma RoverAssembly-objekt, till fältet Plats att placera
  8. I fönstret Hierarki väljer du återställningsknappsobjektet RoverExplorer-knappar >>och konfigurerar sedan händelsen PressableButton OnClicked () i fönstret Inspector enligt följande:

    • Tilldela RoverAssembly-objektet till fältet Ingen (objekt)
    • I listrutan Ingen funktion väljer du PartAssemblyController>ResetPlacement () för att ange den här funktionen som den åtgärd som ska köras när händelsen utlöses

    Screenshot of Unity with Reset button object OnClick event configured.

  9. Om du nu går in i spelläge kan du använda nära eller långt interaktion för att placera roverdelarna på Rovern. När delen är nära motsvarande placeringstips kommer den att brytas på plats och bli en del av Rovern. Om du vill återställa placeringarna kan du trycka på knappen Återställ:

    Screenshot of Unity Play mode split view with Reset button being pressed.

Lägg till gränskontroll

  1. I fönstret Hierarki väljer du objektet RoverExplorer och i fönstret Inspector använder du knappen Lägg till komponent för att lägga till BoundsControl-komponenten . Avmarkera kryssrutan bredvid komponenten för att inaktivera den som standard:

    Screenshot of Unity with RoverExplorer object selected and components added and disabled.

  2. I projektfönstret går du till mappen Packages>MRTK Spatial Manipulation>BoundsControl>Prefabs och klickar och drar i prefab-fältet Bounds Visuals Prefab för komponenten Bounds Control.

    Screenshot of Unity with RoverExplorer object selected and the Bounds Visuals Prefab field configured.

  3. I fönstret Hierarki expanderar du objektet Menyknappar-RutnätLayout >(knappar) för att visa de tre knapparna, byter namn på den tredje knappen till BoundsControl_Enable och konfigurerar sedan BoundsControl_Enable spelobjektet i hierarkifönstret på följande sätt:

    • Välj objektet Frontplate > AnimatedContent > Icon > Label och ändra TextMeshPro-komponenten till Aktivera. Kontrollera att etikettobjektet är aktiverat i hierarkin
    • Konfigurera händelsen PressableButton.OnClicked() genom att tilldela RoverExplorer-objektet till fältet Ingen (objekt) och välja BoundsControl>bool Aktiverat i listrutan Ingen funktion (kontrollera att kryssrutan argument är markerad)
    • Välj den lilla + ikonen för att lägga till en annan händelse
    • Tilldela RoverExplorer-objektet till fältet Ingen (objekt)
    • I listrutan Ingen funktion väljer du ObjectManipulator>bool Aktiverad för att uppdatera det här egenskapsvärdet när händelsen utlöses och kontrollera att kryssrutan för argumentet är markerad
    • Välj den lilla + ikonen för att lägga till en annan händelse
    • Tilldela RoverExplorer-objektet till fältet Ingen (objekt)
    • I listrutan Ingen funktion väljer du BoundsControl>bool HandlesActive för att uppdatera det här egenskapsvärdet när händelsen utlöses och kontrollera att kryssrutan för argumentet är markerad
    • Välj objektet Frontplate > AnimatedContent > Icon > UIButtonFontIcon och ändra ikonen till ikonen med fyra pilar i komponenten Teckensnittsikonväljare. Du hittar detta i listan med ikoner eller anger ** Aktuellt ikonnamn** till "Ikon 40"

    Screenshot of Unity with BoundsControl_Enable button object selected and Button Config Helper component configured.

  4. Duplicera knappen BoundsControl_Enable och byt namn på den till BoundsControl_Disable och konfigurera sedan komponenten Button Config Helper (Script) i fönstret Inspector på följande sätt:

    • Välj objektet För frontplate > AnimatedContent > Icon > Label och ändra TextMeshPro-komponenten till Inaktivera
    • Konfigurera händelsen PressableButton.OnClicked() genom att kontrollera att alla kryssrutor under händelserna är avmarkerade

    Screenshot of Unity with BoundsControl_Disable button object selected and Button Config Helper component configured.

  5. Om du nu anger spelläge och väljer Aktivera för att aktivera Bounds Control kan du använda nära eller långt interaktion för att flytta, rotera och skala gränskontroll och välja Inaktivera för att inaktivera gränskontrollen igen:

    Screenshot of Unity Play mode split view with Bounds Control being manipulated.