Begrenzingsvak — MRTK2
Notitie
Het begrenzingsvak wordt afgeschaft en vervangen door het bijbehorende besturingselement voor opvolgende grenzen. Gebruik een van de migratieopties om bestaande gameobjecten bij te werken.
Het BoundingBox.cs
script biedt basisfunctionaliteit voor het transformeren van objecten in mixed reality. In een begrenzingsvak wordt een kubus rond het hologram weergegeven om aan te geven dat er interactie mee kan worden uitgevoerd. Met grepen op de hoeken en randen van de kubus kunt u het object schalen of draaien. Het begrenzingsvak reageert ook op invoer van de gebruiker. Op HoloLens 2 reageert het begrenzingsvak 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.
Zie Begrenzingsvak en app-balk in het Windows-ontwikkelaarscentrum voor meer informatie.
Voorbeeldscène
In de BoundingBoxExamples
scène vindt u voorbeelden van begrenzingsvakconfiguraties.
Een begrenzingsvak toevoegen en configureren met Unity Inspector
- Box Collider toevoegen aan een object
- Script toewijzen
BoundingBox
aan een object - Opties configureren, zoals activeringsmethoden (zie de sectie Eigenschappen van inspector hieronder)
- (Optioneel) Prefabs en materialen toewijzen voor een HoloLens 2 begrenzingsvak (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.
Een begrenzingsvak toevoegen en configureren in de code
Kubus GameObject instantiëren
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Script toewijzen
BoundingBox
aan een object met collider, met behulp van AddComponent<>()private BoundingBox bbox; bbox = cube.AddComponent<BoundingBox>();
Opties configureren (zie de sectie Eigenschappen van Inspector hieronder)
// Make the scale handles large bbox.ScaleHandleSize = 0.1f; // Hide rotation handles bbox.ShowRotationHandleForX = false; bbox.ShowRotationHandleForY = false; bbox.ShowRotationHandleForZ = false;
(Optioneel) Wijs prefabs en materialen toe voor een begrenzingsvak HoloLens 2 stijl. 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.
bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;
Voorbeeld: Minimale en maximale begrenzingsvakschaal instellen met MinMaxScaleConstraint
Als u de minimale en maximale schaal wilt instellen, gebruikt u de MinMaxScaleConstraint
. U kunt ook MinMaxScaleConstraint gebruiken om de minimale en maximale schaal in te stellen voor ManipulationHandler
.
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;
Voorbeeld: Een begrenzingsvak rond een gameobject toevoegen
Als u een begrenzingsvak rond een object wilt toevoegen, voegt u er gewoon een BoundingBox
onderdeel aan toe:
private void PutABoxAroundIt(GameObject target)
{
target.AddComponent<BoundingBox>();
}
Eigenschappen van inspector
Doelobject
Deze eigenschap geeft aan welk object wordt getransformeerd door het bewerken van het begrenzingsvak. Als er geen object is ingesteld, wordt het begrenzingsvak standaard ingesteld op het object eigenaar.
Grenzen overschrijven
Hiermee stelt u een box collider van het object in voor de berekening van de grenzen.
Activeringsgedrag
Er zijn verschillende opties om de interface van het begrenzingsvak te activeren.
- Activeren bij start: het begrenzingsvak wordt zichtbaar zodra de scène is gestart.
- Activeren door nabijheid: het begrenzingsvak wordt zichtbaar wanneer een gelede hand zich dicht bij het object bevindt.
- Activeren met aanwijzer: het begrenzingsvak wordt zichtbaar wanneer het wordt gericht door een handstraalpointer.
- Handmatig activeren: het begrenzingsvak wordt niet automatisch zichtbaar. U kunt deze handmatig activeren via een script door de eigenschap boundingBox.Active te openen.
Minimaal schalen
De minimaal toegestane schaal. Deze eigenschap is afgeschaft en het verdient de voorkeur om een MinMaxScaleConstraint
script toe te voegen. Als dit script wordt toegevoegd, wordt de minimale schaal uit het script gehaald in plaats van uit het begrenzingsvak.
Maximum schalen
De maximaal toegestane schaal. Deze eigenschap is afgeschaft en het verdient de voorkeur om een MinMaxScaleConstraint
script toe te voegen. Als dit script wordt toegevoegd, wordt de maximale schaal uit het script gehaald in plaats van uit het begrenzingsvak.
Vakweergave
Verschillende visualisatieopties voor begrenzingsvakken.
Als As platmaken is ingesteld op Automatisch platmaken, staat het script manipulatie langs de as niet toe met de kleinste omvang. Dit resulteert in een 2D-begrenzingsvak, dat meestal wordt gebruikt voor dunne objecten.
Behandelt
U kunt het materiaal en de prefab toewijzen om de stijl van de handgreep te overschrijven. Als er geen grepen zijn toegewezen, worden deze weergegeven in de standaardstijl.
gebeurtenis
Begrenzingsvak bevat 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 beëindigd: geactiveerd wanneer de rotatie eindigt.
- Schalen gestart: wordt geactiveerd wanneer het schalen wordt gestart.
- Schaal beëindigd: wordt geactiveerd wanneer het schalen is beëindigd.
Greepstijlen
Wanneer u het BoundingBox.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.
Hieronder ziet u de prefabs, materialen en de schaalwaarden voor de HoloLens 2 stijl begrenzingsvakgrepen. U vindt dit voorbeeld in de BoundingBoxExamples
scène.
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)
Nabijheid (instellen voor HoloLens 2 stijl)
De handgrepen weergeven en verbergen met animatie op basis van de afstand tot de handen. Het heeft een animatie voor schalen in twee stappen.
- Nabijheidseffect actief: activering van op nabijheid gebaseerde ingang inschakelen
- Gemiddelde nabijheid verwerken: afstand voor de eerste stap schalen
- Directe nabijheid verwerken: afstand voor de schaal van de tweede stap
- Verre schaal: standaardschaalwaarde van de handgreepasset wanneer de handen buiten het bereik van de interactie van het begrenzingsvak vallen (afstand hierboven gedefinieerd door 'Handle Medium Proximity'. 0 gebruiken om de greep standaard te verbergen)
- Gemiddelde schaal: schaalwaarde van het greepasset wanneer de handen zich binnen het bereik van de interactie van het begrenzingsvak bevinden (afstand hierboven gedefinieerd door 'Handle Close Proximity'). Gebruik 1 om de normale grootte weer te geven)
- Schaal sluiten: schaalwaarde van het handgreepasset wanneer de handen zich binnen het bereik van de grijpinteractie bevinden (afstand hierboven gedefinieerd door 'Handle Close Proximity'. Gebruik 1.x om groter formaat weer te geven)
Een object verplaatsbaar maken met manipulatiehandler
Een begrenzingsvak kan worden gecombineerd met ManipulationHandler.cs
om het object verplaatsbaar te maken met behulp van verre interactie. De manipulatiehandler ondersteunt interacties met één hand en tweehandig.
Handtracering kan worden gebruikt om van dichtbij met een object te communiceren.
Om ervoor te zorgen dat de randen van het begrenzingsvak zich op dezelfde manier gedragen bij het verplaatsen met behulp van ManipulationHandler
de verre interactie, is het raadzaam om de gebeurtenissen voor respectievelijk Bij manipulatie gestart / bij manipulatie beëindigd te BoundingBox.HighlightWires
/ BoundingBox.UnhighlightWires
verbinden met, zoals wordt weergegeven in de bovenstaande schermopname.
Migreren naar besturingselement voor grenzen
Bestaande prefabs en exemplaren met 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 eigenschapcontrole van het onderdeel.