Besturingselement Grenzen — MRTK2

Besturingselement Grenzen

BoundsControl is het nieuwe onderdeel voor manipulatiegedrag, eerder te vinden in BoundingBox. Het besturingselement Bounds brengt een aantal verbeteringen en vereenvoudigingen aan in de installatie en voegt nieuwe functies toe. Dit onderdeel is een vervanging voor het begrenzingsvak, dat wordt afgeschaft.

Het BoundsControl.cs script biedt basisfunctionaliteit voor het transformeren van objecten in mixed reality. Een besturingselement voor grenzen toont een vak rond het hologram om aan te geven dat er interactie mee kan worden uitgevoerd. Met grepen op de hoeken en randen van het vak kunt u het object schalen, draaien of vertalen. Het besturingselement voor grenzen reageert ook op gebruikersinvoer. Op HoloLens 2 reageert het besturingselement voor grenzen bijvoorbeeld op de nabijheid van de vinger, waardoor visuele feedback wordt gegeven om de afstand tot het object waar te nemen. Alle interacties en visuals kunnen eenvoudig worden aangepast.

Voorbeeldscène

In de BoundsControlExamples scène vindt u voorbeelden van configuraties voor besturingselementen voor grenzen.

Voorbeeld van besturingselement Voor grenzen

Eigenschappen van inspector

Doelobject

Deze eigenschap geeft aan welk object wordt getransformeerd door het bewerken van het besturingselement voor grenzen. Als er geen object is ingesteld, wordt het standaard ingesteld op het eigenaarsobject.

Activeringsgedrag

Er zijn verschillende opties om de interface voor het besturingselement bounds te activeren.

  • Activeren bij start: Besturingselement Grenzen wordt zichtbaar zodra de scène is gestart.
  • Activeren door nabijheid: Het besturingselement Grenzen wordt zichtbaar wanneer een gearticuleerde hand zich dicht bij het object bevindt.
  • Activeren door aanwijzer: Het besturingselement Grenzen wordt zichtbaar wanneer het wordt gericht door een hand-ray-aanwijzer.
  • Activeren door nabijheid en aanwijzer: Het besturingselement Grenzen wordt zichtbaar wanneer het wordt gericht door een handstraalaanwijzer of wanneer een gearticuleerde hand zich dicht bij het object bevindt.
  • Handmatig activeren: Het besturingselement Grenzen wordt niet automatisch zichtbaar. U kunt deze handmatig activeren via een script door toegang te krijgen tot de eigenschap boundsControl.Active.

Overschrijven van grenzen

Hiermee stelt u een box collider van het object in voor de berekening van bounds.

Opvulling van doos

Hiermee voegt u een opvulling toe aan de collidergrenzen die worden gebruikt om de omvang van het besturingselement te berekenen. Dit heeft niet alleen invloed op de interactie, maar ook op de visuals.

As platmaken

Geeft aan of het besturingselement is afgevlakt in een van de assen, waardoor het tweedimensionaal is en manipulatie langs die as wordt opgeheven. Deze functie kan worden gebruikt voor dunne objecten zoals leien. Als de as platmaken is ingesteld op Automatisch afvlakken , kiest het script automatisch de as met de kleinste mate als platte as.

Smoothing

Met de sectie vloeiend maken kunt u het vloeiende gedrag configureren voor het schalen en draaien van het besturingselement.

Visuals

Het uiterlijk van het besturingselement voor grenzen kan worden geconfigureerd door een van de bijbehorende visualsconfiguraties te wijzigen. Visuele configuraties zijn gekoppelde of inlined scriptbare objecten en worden uitgebreid beschreven in de sectie configuratieobjecten.

Configuratieobjecten

Het besturingselement wordt geleverd met een set configuratieobjecten die kunnen worden opgeslagen als scriptbare objecten en kunnen worden gedeeld tussen verschillende exemplaren of prefabs. Configuraties kunnen worden gedeeld en gekoppeld als afzonderlijke scriptbare assetbestanden of geneste scriptbare assets binnen prefabs. Verdere configuraties kunnen ook rechtstreeks op het exemplaar worden gedefinieerd zonder koppeling naar een externe of geneste scriptbare asset.

De controlecontrole voor grenzen geeft aan of een configuratie wordt gedeeld of inline is als onderdeel van het huidige exemplaar door een bericht weer te geven in de eigenschapcontrole. Bovendien kunnen gedeelde exemplaren niet rechtstreeks in het venster van de eigenschap van het besturingselement voor grenzen zelf worden bewerkt, maar in plaats daarvan moet de asset waarnaar wordt gekoppeld, rechtstreeks worden aangepast om onbedoelde wijzigingen in gedeelde configuraties te voorkomen.

Het besturingselement Voor huidige grenzen biedt opties voor configuratieobjecten voor de volgende functies:

Box-configuratie

De boxconfiguratie is verantwoordelijk voor het renderen van een effen doos met grenzen die zijn gedefinieerd via collidergrootte en doosopvulling. De volgende eigenschappen kunnen worden ingesteld:

  • Doosmateriaal: definieert het materiaal dat wordt toegepast op de gerenderde doos wanneer er geen interactie plaatsvindt. Een vak wordt alleen weergegeven als dit materiaal is ingesteld.
  • Box gepakt materiaal: materiaal voor de doos wanneer de gebruiker communiceert met het besturingselement door te grijpen via near of far interactie.
  • Weergaveschaal voor platte as: een schaal die wordt toegepast op het vak als een van de assen is afgevlakt.

Configuratie van ingangen schalen

Met deze eigenschappenlade kunt u het gedrag en de visualisatie van schaalgrepen van het besturingselement Voor grenzen wijzigen.

  • Materiaal van de handgreep: materiaal toegepast op de handgrepen.
  • Greep gepakt materiaal: materiaal toegepast op de gepakte handgreep.
  • Prefab verwerken: optionele prefab voor de schaalgreep. Als niet is ingesteld, gebruikt MRTK standaard een kubus.
  • Grootte van greep: grootte van de schaalgreep.
  • Collideropvulling: opvulling om toe te voegen aan de handgreepboter.
  • Teken tether tijdens het manipuleren: wanneer actief een tetherlijn tekent vanaf het beginpunt van de interactie naar de huidige positie van de hand of aanwijzer.
  • Ingangen negeren collider: als hier een collier wordt gekoppeld, negeren ingangen elke botsing met deze collier.
  • Greep leisteen prefab: prefab voor de handgreep wanneer het besturingselement wordt afgevlakt.
  • Schaalgrepen weergeven: hiermee bepaalt u de zichtbaarheid van de greep.
  • Schaalgedrag: kan worden ingesteld op uniform of niet-uniform schalen.

Configuratie van draaiingangen

Deze configuratie definieert het gedrag van de draaiingang.

  • Materiaal van de handgreep: materiaal toegepast op de handgrepen.
  • Greep gepakt materiaal: materiaal toegepast op de gepakte handgreep.
  • Prefab verwerken: optionele prefab voor de ingang. Als niet is ingesteld, gebruikt MRTK standaard een bol.
  • Grootte van greep: grootte van de greep.
  • Collideropvulling: opvulling om toe te voegen aan de handgreepboter.
  • Teken tether tijdens het manipuleren: wanneer actief een tetherlijn tekent vanaf het beginpunt van de interactie naar de huidige positie van de hand of aanwijzer.
  • Ingangen negeren collider: als hier een collier wordt gekoppeld, negeren ingangen elke botsing met deze collier.
  • Type prefab-collider: type collider dat moet worden gebruikt met de gemaakte ingang.
  • Greep voor X weergeven: bepaalt de zichtbaarheid van de greep voor de X-as.
  • Greep voor Y weergeven: bepaalt de zichtbaarheid van de greep voor de Y-as.
  • Greep voor Z weergeven: bepaalt de zichtbaarheid van de ingang voor de Z-as.

Configuratie van vertaalhandgrepen

Hiermee kunt u vertaalingangen inschakelen en configureren voor het besturingselement voor begrenzingen. Vertaalingangen zijn standaard uitgeschakeld.

  • Materiaal van de handgreep: materiaal toegepast op de handgrepen.
  • Greep gepakt materiaal: materiaal toegepast op de gepakte handgreep.
  • Prefab verwerken: optionele prefab voor de ingang. Als niet is ingesteld, gebruikt MRTK standaard een bol.
  • Grootte van greep: grootte van de greep.
  • Collideropvulling: opvulling om toe te voegen aan de handgreepboter.
  • Teken tether bij het manipuleren: wanneer actief wordt een tetherlijn getekend vanaf het beginpunt van de interactie naar de huidige hand- of aanwijzerpositie.
  • Ingangen negeren collider: als een collier hier wordt gekoppeld, negeren ingangen elke botsing met deze collier.
  • Type prefab collider: type collider dat moet worden gebruikt met de gemaakte greep.
  • Greep voor X weergeven: bepaalt de zichtbaarheid van de greep voor de X-as.
  • Greep voor Y weergeven: hiermee bepaalt u de zichtbaarheid van de greep voor de Y-as.
  • Greep voor Z weergeven: hiermee bepaalt u de zichtbaarheid van de greep voor de Z-as.

De configuratie van koppelingen maakt de wireframe-functie van het besturingselement voor grenzen mogelijk. De volgende eigenschappen kunnen worden geconfigureerd:

  • Draadmodelmateriaal: het materiaal dat op het draadmodel wordt toegepast.
  • Radius van draadmodelrand: de dikte van het draadmodel.
  • Draadmodelvorm: vorm van het draadmodel kan worden uitgevoerd door kubieke of cilindrische.
  • Draadmodel weergeven: hiermee bepaalt u de zichtbaarheid van het draadmodel.

Configuratie van nabijheidseffect

De handgrepen weergeven en verbergen met animatie op basis van de afstand tot de handen. Het heeft een animatie voor schalen in twee stappen. De standaardinstellingen zijn ingesteld op HoloLens 2 stijlgedrag.

Besturingselement Nabijheid van grenzen
  • Nabijheidseffect actief: activering van op nabijheid gebaseerde ingang inschakelen
  • Object medium proximity: afstand voor de eerste stap schalen
  • Nabijheid van object: afstand voor de tweede stap schalen
  • Ver schalen: standaardschaalwaarde van de handgreepasset wanneer de handen buiten het bereik van de interactie van het besturingselement voor grenzen vallen (afstand die hierboven wordt gedefinieerd door 'Handle Medium Proximity'. 0 gebruiken om de greep standaard te verbergen)
  • Gemiddelde schaal: schaalwaarde van de handgreepasset wanneer de handen zich binnen het bereik van de interactie van de begrendelbesturing bevinden (afstand hierboven gedefinieerd door 'Handle Close Proximity'. Gebruik 1 om de normale grootte weer te geven)
  • Schaal sluiten: schaalwaarde van het handvatasset wanneer de handen zich binnen het bereik van de grijpinteractie bevinden (afstand hierboven gedefinieerd door 'Handle Close Proximity'. Gebruik 1.x om een groter formaat weer te geven)
  • Vergroeisnelheid: beoordeel de schaal van een object met nabijheidsschaal wanneer de hand van gemiddelde naar verre afstand beweegt.
  • Gemiddelde groeisnelheid: beoordeel de schaal van een nabijheidsobject wanneer de hand van gemiddelde naar dichte nabijheid beweegt.
  • Groeisnelheid sluiten: Beoordeel de schaal van een nabijheidsobject wanneer de hand van dichtbij naar het objectcentrum beweegt.

Systeem met beperkingen

Besturingselement Grenzen ondersteunt het gebruik van beperkingsbeheer om het vertaal-, draai- of schaalgedrag te beperken of te wijzigen tijdens het gebruik van besturingselementgrepen voor begrenzing.

De eigenschappencontrole toont alle beschikbare beperkingsmanagers die zijn gekoppeld aan hetzelfde gameobject in een vervolgkeuzelijst met een optie om te schuiven en de geselecteerde beperkingsmanager te markeren.

Beperkingen voor besturingselement voor grenzen

gebeurtenis

Het besturingselement Voor grenzen biedt de volgende gebeurtenissen. In dit voorbeeld worden deze gebeurtenissen gebruikt om audiofeedback af te spelen.

  • Draaien gestart: wordt geactiveerd wanneer de rotatie wordt gestart.
  • Draaien gestopt: geactiveerd wanneer de draaiing stopt.
  • Schalen gestart: wordt geactiveerd wanneer het schalen wordt gestart.
  • Schaal gestopt: wordt geactiveerd wanneer het schalen stopt.
  • Vertalen gestart: wordt geactiveerd wanneer de vertaling wordt gestart.
  • Vertalen gestopt: wordt geactiveerd wanneer de vertaling stopt.
Besturingselement gebeurtenissen voor grenzen

Elastieken (experimenteel)

Elastische gegevens kunnen worden gebruikt bij het bewerken van objecten via het besturingselement voor grenzen. Houd er rekening mee dat het elastics-systeem zich nog steeds in experimentele toestand bevindt. Als u elastics wilt inschakelen, koppelt u een bestaand onderdeel van Elastics Manager of maakt en koppelt u een nieuwe elastische manager via de Add Elastics Manager knop.

Grenzen bepalen Elastics

Greepstijlen

Wanneer u het BoundsControl.cs script alleen toewijst, wordt standaard de ingang van de HoloLens 1st gen-stijl weergegeven. Als u HoloLens 2 stijlgrepen wilt gebruiken, moet u de juiste prefabs en materialen toewijzen.

Stijlen voor besturingsgrepen voor grenzen 2

Hieronder ziet u de prefabs, materialen en de schaalwaarden voor de besturingsgrepen voor HoloLens 2 stijlgrenzen. U vindt dit voorbeeld in de BoundsControlExamples scène.

HandleStyles voor besturingselementen voor grenzen

Grepen (instellen voor HoloLens 2 stijl)

  • Materiaal handgreep: BoundingBoxHandleWhite.mat
  • Handgreep gepakt materiaal: BoundingBoxHandleBlueGrabbed.mat
  • Schaalgreep prefab: MRTK_BoundingBox_ScaleHandle.prefab
  • Schaalgreep Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Schaalgreep grootte: 0,016 (1,6 cm)
  • Schaalgreep collider opvulling: 0,016 (maakt de grabbable collider iets groter dan de handle-visual)
  • Draaigreep Prefab: MRTK_BoundingBox_RotateHandle.prefab
  • Grootte van draaigreep: 0,016
  • Opvulling van draaigreep collider: 0,016 (maakt de grabbable collider iets groter dan de visual van de handgreep)

Transformatiewijzigingen met objectmanipulator

Een besturingselement voor grenzen kan worden gebruikt in combinatie met ObjectManipulator.cs om bepaalde soorten manipulatie (bijvoorbeeld het verplaatsen van het object) mogelijk te maken zonder gebruik te maken van grepen. De manipulatie-handler ondersteunt zowel een- als tweehandige interacties. Handtracering kan worden gebruikt om met een object van dichtbij te communiceren.

Objectmanipulator voor besturingselement grenzen

Om ervoor te zorgen dat de randen van de begrenzingen zich op dezelfde manier gedragen bij het verplaatsen met behulp van ObjectManipulatorde verre interactie, is het raadzaam om de gebeurtenissen voor bij manipulatie gestart / bijmanipulatie beëindigd respectievelijk te BoundsControl.HighlightWires / BoundsControl.UnhighlightWires verbinden met, zoals wordt weergegeven in de bovenstaande schermopname.

Een besturingselement voor grenzen toevoegen en configureren met Unity Inspector

  1. Box Collider toevoegen aan een object
  2. Script toewijzen BoundsControl aan een object
  3. Opties configureren, zoals activeringsmethoden (zie de sectie Eigenschappen van inspector hieronder)
  4. (Optioneel) Prefabs en materialen toewijzen voor een besturingselement voor HoloLens 2 stijlgrenzen (zie de sectie Greepstijlen hieronder)

Notitie

Gebruik het veld Doelobject en Het overschrijven van grenzen in de inspector om een specifiek object en een conflict toe te wijzen in het object met meerdere onderliggende onderdelen.

Besturingselement Voor grenzen

Een besturingselement voor grenzen toevoegen en configureren in de code

  1. Kubus GameObject instantiëren

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Script toewijzen BoundsControl aan een object met collider, met behulp van AddComponent<>()

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Configureer opties rechtstreeks op het besturingselement of via een van de scriptbare configuraties (zie de sectie Inspector-eigenschappen en -configuraties hieronder)

    // Change activation method
    boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer;
    // Make the scale handles large
    boundsControl.ScaleHandlesConfig.HandleSize = 0.1f;
    // Hide rotation handles for x axis
    boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
    
  4. (Optioneel) Wijs prefabs en materialen toe voor een besturingselement HoloLens 2 stijlgrenzen. Dit vereist nog steeds toewijzingen via de inspector omdat de materialen en prefabs dynamisch geladen moeten worden.

Notitie

Het gebruik van de map 'Resources' van Unity of Shader.Find voor het dynamisch laden van shaders wordt niet aanbevolen, omdat permutaties van shaders tijdens runtime mogelijk ontbreken.

BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;

Voorbeeld: De besturingsschaal voor minimale en maximale grenzen instellen met Behulp van MinMaxScaleConstraint

Als u de minimale en maximale schaal wilt instellen, koppelt u een MinMaxScaleConstraint aan uw besturingselement. Als het besturingselement voor limieten automatisch beperkingenbeheer koppelt en activeert, wordt de MinMaxScaleConstraint automatisch toegepast op de transformatiewijzigingen zodra deze is gekoppeld en geconfigureerd.

U kunt ook MinMaxScaleConstraint gebruiken om de minimale en maximale schaal in te stellen voor ObjectManipulator.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Voorbeeld: Besturingselement grenzen toevoegen rond een gameobject

Als u een besturingselement voor grenzen rond een object wilt toevoegen, voegt u er gewoon een BoundsControl onderdeel aan toe:

private void PutABoundsControlAroundIt(GameObject target)
{
   target.AddComponent<BoundsControl>();
}

Migreren vanuit begrenzingsvak

Bestaande prefabs en exemplaren met behulp van het begrenzingsvak kunnen worden bijgewerkt naar het nieuwe besturingselement voor grenzen via het migratievenster dat deel uitmaakt van het MRTK-hulpprogrammapakket.

Voor het upgraden van afzonderlijke exemplaren van het begrenzingsvak is er ook een migratieoptie in de eigenschappencontrole van het onderdeel.

Besturingselement Grenzen migreren

Zie ook