Oefening - Manipuleer 3D-objecten met behulp van begrenzingscontrole.

Voltooid

Het ObjectManipulator script maakt een object beweegbaar, schaalbaar en draaibaar met behulp van een of twee handen. Dit script ondersteunt het invoermodel voor directe manipulatie, omdat de gebruiker rechtstreeks met zijn handen hologrammen kan aanraken. ObjectManipulator Gebruik hier om handinteracties in te schakelen, zodat u de roververkenner kunt verplaatsen, schalen en draaien.

  1. Daarnaast configureert u de Rover Explorer, zodat u de roveronderdelen op de Rover kunt plaatsen om het een complete Rover-assembly te maken. Vouw in het deelvenster Hierarchy het RoverExplorer >RoverParts-object uit en selecteer alle onderliggende roveronderdelenobjecten en het RoverAssembly-object . Gebruik vervolgens in het deelvenster Inspector de knop Component toevoegen om de volgende onderdelen toe te voegen aan alle geselecteerde objecten:

    • Object Manipulator (Script) onderdeel
    • Part Assembly Controller (Script)-onderdeel

    Schermopname van RoverAssembly met alle roveronderdelen geselecteerd en onderdelen toegevoegd.

  2. Als alle roveronderdelenobjecten en het RoverAssembly-object nog steeds zijn geselecteerd, configureert u in het deelvenster Inspector het onderdeel Object Manipulator (Script) als volgt:

    • Zoek onder Basis Interacte Instellingende Bij klikken () gebeurtenis. Selecteer het pictogram + om een nieuwe gebeurtenis toe te voegen. Configureer de gebeurtenis als volgt:

      een. Wijs het RoverAssembly--object toe als listener voor de gebeurtenis On Clicked () door het vanuit Hierarchy naar het veld None (Object) te slepen.

      b. Selecteer in de vervolgkeuzelijst Geen functieTapToPlace>StartPlacement() om deze methode aan te roepen wanneer de gebeurtenis wordt geactiveerd.

    • Schakel in de vervolgkeuzelijst Toegestane manipulatietype het selectievakje Schaal uit, zodat alleen Verplaatsen en Draaien is ingeschakeld:

    Schermopname van Unity met Two Handed Manipulation Type geconfigureerd.

  3. Selecteer alleen het RoverAssembly-object en verwijder het Stateful Interactable-onderdeel erop als er een is. Selecteer de drie puntjes uiterst rechts van het onderdeel en selecteer Onderdeel verwijderen.

  4. Navigeer in het deelvenster Project naar Packages>MRTK Standard Assets>Audio>HoloLens2 map om de audioclips te zoeken:

    Schermopname van het Unity Project-venster met de map Audio geselecteerd.

  5. Selecteer in het deelvenster Hiërarchie alle roveronderdelen opnieuw en selecteer vervolgens in het deelvenster Inspector component toevoegen om het onderdeel Audiobronnen toe te voegen en configureer het als volgt:

    • Wijs de MRTK_Scale_Start audioclip toe aan het veld AudioClip .
    • Schakel het selectievakje Play On Awake uit.
    • Wijzig spatial blend in 1.

    Schermopname van Unity met alle roveronderdelen geselecteerd en audiobrononderdeel toegevoegd en geconfigureerd.

  6. Vouw in het deelvenster Hiërarchie de RoverAssembly-RoverModel_PlacementHints_XRray>Parts_PlacementHints> object uit om alle plaatsingshintobjecten weer te geven, selecteer vervolgens het eerste roveronderdeel,RoverParts>Camera_Part en configureer het onderdeel Part Assembly Controller (Script) als volgt:

    • Wijs het Camera_PlacementHint-object toe aan het veld Locatie om te plaatsen .

    nl-NL: Schermopname van Unity met geconfigureerde componenten Camera_Part en PartAssemblyController.

  7. Herhaal stap 5 voor elk van de resterende roveronderdelen en het RoverAssembly-object om het onderdeel Part Assembly Controller (Script) als volgt te configureren:

    • Wijs voor de Generator_Part het Generator_PlacementHint-object toe aan het veld Locatie om te plaatsen .
    • Wijs voor de Lights_Part het Lights_PlacementHint-object toe aan het veld Locatie om te plaatsen .
    • Wijs voor de UHFAntenna_Part het UHFAntenna_PlacementHint-object toe aan het veld Locatie om te plaatsen .
    • Wijs voor de Spectrometer_Part het Spectrometer_PlacementHint-object toe aan het veld Locatie om te plaatsen.
    • Wijs voor RoverAssembly het object zelf toe, dat wil gezegd hetzelfde RoverAssembly-object, aan het veld Location To Place .
  8. Selecteer in het deelvenster Hiërarchie het knopobject RoverExplorer > Buttons >Reset en configureer vervolgens in het deelvenster Inspector de gebeurtenis PressableButton.OnClicked () als volgt:

    • Wijs het RoverAssembly-object toe aan het veld None (Object).
    • Selecteer in de vervolgkeuzelijst Geen functiePartAssemblyController>ResetPlacement () om deze functie in te stellen als de actie die moet worden uitgevoerd wanneer de gebeurtenis wordt geactiveerd.

    Schermopname van Unity met de OnClick-gebeurtenis voor de resetknop geconfigureerd.

  9. Als je nu de spelmodus betreedt, kun je met behulp van nabije of verre interactie de roveronderdelen op de Rover plaatsen. Zodra het onderdeel dicht bij de bijbehorende plaatsingshint is, zal het vastklikken en onderdeel worden van de rover. Als u de plaatsingen opnieuw wilt instellen, drukt u op de knop Opnieuw instellen:

    Schermopname van de splitsweergave van de Unity Play-modus met de knop Reset ingedrukt.

Grenzenregeling toevoegen

  1. Selecteer in het venster Hierarchy het RoverExplorer-object en gebruik vervolgens in het venster Inspector de knop Component toevoegen om het component BoundsControl toe te voegen. Schakel het selectievakje naast het onderdeel uit om het standaard uit te schakelen:

    Schermopname van Unity met RoverExplorer-object geselecteerd en onderdelen toegevoegd en uitgeschakeld.

  2. Navigeer in het venster Project naar de map Packages>MRTK Spatial Manipulation>BoundsControl>Prefabs en klik en sleep de prefab BoundingBoxWithHandles naar het veld Bounds Visuals Prefab van het onderdeel Bounds Control.

    Schermopname van Unity met RoverExplorer-object geselecteerd en het veld Bounds Visuals Prefab geconfigureerd.

  3. Vouw in het deelvenster Hiërarchie het object Menu>Buttons-GridLayout (Knoppen) uit om de drie knoppen weer te geven. Wijzig de naam van de derde knop in BoundsControl_Enable en configureer vervolgens in het venster Hierarchy het BoundsControl_Enable gameobject als volgt:

    • Selecteer het Frontplate > AnimatedContent > Icon > Label object en wijzig de TextMeshPro-component naar Inschakelen. Zorg ervoor dat het labelobject is geactiveerd in de hiërarchie.
    • Configureer de gebeurtenis PressableButton.OnClicked() door het RoverExplorer-object toe te wijzen aan het veld None (Object) en BoundsControl>bool Enabled te selecteren in de vervolgkeuzelijst Geen functie (controleer of het selectievakje argument is ingeschakeld).
    • Selecteer het kleine + pictogram om een andere gebeurtenis toe te voegen.
    • Wijs het RoverExplorer-object toe aan het veld Geen (Object).
    • Selecteer in de vervolgkeuzelijst No Function en kies ObjectManipulator>bool Enabled om deze eigenschapswaarde bij te werken wanneer de gebeurtenis wordt geactiveerd en controleer of het argument selectievakje is aangevinkt.
    • Selecteer het kleine + pictogram om een andere gebeurtenis toe te voegen.
    • Wijs het RoverExplorer-object toe aan het veld Geen (Object).
    • Selecteer in de vervolgkeuzelijst Geen functiede optie BoundsControl>bool HandlesActive om deze eigenschapswaarde bij te werken wanneer de gebeurtenis wordt geactiveerd en controleer of het selectievakje voor het argument is ingeschakeld.
    • Selecteer het Frontplate > AnimatedContent > Icon > UIButtonFontIcon object en wijzig het Icon in het pictogram met vier pijlen in het lettertypepictogramselector onderdeel. U vindt dit in de lijst met pictogrammen of stel de naam van het huidige pictogram in op Pictogram 40.

    Schermopname van Unity met BoundsControl_Enable knopobject geselecteerd en knopconfiguratiehulponderdeel geconfigureerd.

  4. Dupliceer de knop BoundsControl_Enable en wijzig de naam ervan in BoundsControl_Disable. Configureer vervolgens in het deelvenster Inspector het onderdeel Knophulp voor configuratie (Script) als volgt:

    • Selecteer het Frontplate > AnimatedContent > Icon > Label-object en wijzig het TextMeshPro-onderdeel in Uitschakelen.
    • Configureer de gebeurtenis PressableButton.OnClicked() door ervoor te zorgen dat alle selectievakjes onder de gebeurtenissen zijn uitgeschakeld.

    Schermopname van Unity met BoundsControl_Disable knopobject geselecteerd en knopconfiguratiehulponderdeel geconfigureerd.

  5. Als u nu de gamemodus opent en Inschakelen selecteert om Grenscontrole in te schakelen, kunt u gebruikmaken van nabije of verre interactie om Grenscontrole te verplaatsen, te roteren en te schalen, en selecteert u Uitschakelen om de Grenscontrole weer uit te schakelen.

    Schermopname van de gesplitste modusweergave van de Unity Play-modus, waarbij grenzenbesturing wordt gemanipuleerd.