Oefening 3D-objecten bewerken met behulp van grenzenbesturing

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. Gebruik hier ObjectManipulator 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 roverassembly te maken. Vouw in het deelvenster Hierarchy het RoverExplorer >RoverParts object uit en selecteer alle onderliggende roveronderdelenobjecten en het RoverAssembly-object en 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
    • onderdeel part assemblycontroller (script)

    Schermopname van RoverAssembly met alle onderdelen van de rover geselecteerd en onderdelen toegevoegd.

  2. Als alle roveronderdelenobjecten en het RoverAssembly-object nog steeds zijn geselecteerd, configureert u in het deelvenster Inspector de 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 Toegestaan manipulatietype het selectievakje Schaal uit, zodat alleen Verplaatsen en Draaien zijn 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 vervolgens Onderdeel verwijderen.

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

    Schermopname van het venster Unity Project met audiomap geselecteerd.

  5. Selecteer in het deelvenster Hiërarchie opnieuw alle roveronderdelenen selecteer dan in het deelvenster Inspector Component toevoegen voor het toevoegen van de component Audiobronnen en configureer deze als volgt:

    • Wijs het MRTK_Scale_Start audiofragment 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 het RoverAssembly-> RoverModel_PlacementHints_XRay >Parts_PlacementHints-object uit om alle plaatsingshintobjecten weer te geven, selecteer vervolgens het eerste roveronderdeel, RoverParts >Camera_Parten configureer de Part Assembly Controller (Script) als volgt:

    • Het object Camera_PlacementHint toewijzen 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 roveronderdelenobjecten en het RoverAssembly-object om de Part Assembly Controller (Script) als volgt te configureren:

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

    • Wijs het RoverAssembly-object toe aan het veld Geen (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 Opnieuw instellen ingedrukt.

Grenzenregeling toevoegen

  1. Selecteer in het venster Hierarchy de RoverExplorer object en gebruik vervolgens in het venster Inspector de knop Component toevoegen om het onderdeel BoundsControl toe te voegen. schakel het selectievakje naast het onderdeel uit om 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, klik en sleep de BoundingBoxWithHandles prefab naar het Bounds Visuals Prefab veld van het Bounds Control component.

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

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

    • Selecteer het Frontplate > AnimatedContent > Icon > Label object en wijzig het TextMeshPro-onderdeel in Enable. Zorg ervoor dat het labelobject is geactiveerd in de hiërarchie
    • Configureer het PressableButton.OnClicked()-evenement door het RoverExplorer--object toe te wijzen aan het veld None (Object) en BoundsControl>bool Enabled te selecteren in de vervolgkeuzelijst No Function (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 functieObjectManipulator>bool ingeschakeld om deze eigenschapswaarde bij te werken wanneer de gebeurtenis wordt geactiveerd en controleer of het selectievakje voor argumenten 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 Geen functieBoundsControl>bool HandlesActive om deze eigenschapswaarde bij te werken wanneer de gebeurtenis wordt geactiveerd en controleer of het argument selectievakje aangevinkt is
    • 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 ** Huidige pictogramnaam** 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 de Knop Config Helper (Script) onderdeel 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 worden 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 nabij of op afstand interactie gebruiken om Grenscontrole te verplaatsen, draaien en schalen. Selecteer Uitschakelen om Grenscontrole opnieuw uit te schakelen.

    Schermopname van de gesplitste weergave van de Unity-afspeelmodus, waarbij Bounds Control wordt gemanipuleerd.