Dela via


Gränskontroll – MRTK2

Gränskontroll

BoundsControl är den nya komponenten för manipuleringsbeteende, som tidigare fanns i BoundingBox. Gränskontrollen gör ett antal förbättringar och förenklingar i installationen och lägger till nya funktioner. Den här komponenten ersätter avgränsningsrutan, som kommer att bli inaktuell.

Skriptet BoundsControl.cs innehåller grundläggande funktioner för att transformera objekt i mixad verklighet. En gränskontroll visar en ruta runt hologrammet som anger att den kan interageras med. Handtag i hörnen och kanterna på rutan gör det möjligt att skala, rotera eller översätta objektet. Gränskontrollen reagerar också på användarindata. På HoloLens 2 svarar till exempel gränskontrollen på fingernäring, vilket ger visuell feedback för att hjälpa till att uppfatta avståndet från objektet. Alla interaktioner och visuella objekt kan enkelt anpassas.

Exempelscen

Du hittar exempel på gränskontrollkonfigurationer i scenen BoundsControlExamples .

Exempel på gränskontroll

Egenskaper för kontroll

Målobjekt

Den här egenskapen anger vilket objekt som ska transformeras av bindningskontrollmanipuleringen. Om inget objekt har angetts används ägarobjektet som standard.

Aktiveringsbeteende

Det finns flera alternativ för att aktivera gränskontrollgränssnittet.

  • Aktivera vid start: Gränskontrollen blir synlig när scenen har startats.
  • Aktivera med närhet: Gränskontrollen blir synlig när en ledad hand är nära objektet.
  • Aktivera med pekare: Gränskontrollen blir synlig när den är riktad mot en handstrålepekare.
  • Aktivera med närhet och pekare: Gränskontrollen blir synlig när den riktas mot en handstrålepekare eller en ledad hand är nära objektet.
  • Aktivera manuellt: Gränskontrollen visas inte automatiskt. Du kan aktivera det manuellt via ett skript genom att öppna egenskapen boundsControl.Active.

Åsidosättning av gränser

Anger en box collider från objektet för bindningsberäkning.

Utfyllnad av ruta

Lägger till en utfyllnad till de kolliderargräns som används för att beräkna kontrollens omfattning. Detta påverkar inte bara interaktionen utan påverkar även de visuella objekten.

Platta ut axel

Anger om kontrollen är utplattad i en av axlarna, vilket gör den 2-dimensionell och inte tillåter manipulering längs den axeln. Den här funktionen kan användas för tunna objekt som skiffer. Om platta ut axeln är inställd på Platta ut automatiskt väljer skriptet automatiskt axeln med den minsta omfattningen som platt axel.

Utjämning

Utjämningsavsnittet gör det möjligt att konfigurera utjämningsbeteende för skalning och rotation av kontrollen.

Visuella objekt

Gränskontrollens utseende kan konfigureras genom att ändra någon av motsvarande konfigurationer för visuella objekt. Visuella konfigurationer är antingen länkade eller inlindade skriptbara objekt och beskrivs mer detaljerat i avsnittet konfigurationsobjekt.

Konfigurationsobjekt

Kontrollen levereras med en uppsättning konfigurationsobjekt som kan lagras som skriptbara objekt och delas mellan olika instanser eller prefabriceringar. Konfigurationer kan delas och länkas antingen som enskilda skriptbara tillgångsfiler eller kapslade skriptbara tillgångar i prefabs. Ytterligare konfigurationer kan också definieras direkt på instansen utan att länka till en extern eller kapslad skriptbar tillgång.

Kontrollkontrollen för bindningar anger om en konfiguration delas eller anges som en del av den aktuella instansen genom att visa ett meddelande i egenskapskontrollen. Dessutom kan delade instanser inte redigeras direkt i fönstret för egenskapen bounds control, utan i stället måste tillgången som den länkar till vara direkt modfierad för att undvika oavsiktliga ändringar i delade konfigurationer.

För närvarande erbjuder gränskontroll alternativ för konfigurationsobjekt för följande funktioner:

Box-konfiguration

Lådkonfigurationen ansvarar för att återge en heldragen ruta med gränser som definierats via kolliderarstorlek och boxutfyllnad. Följande egenskaper kan konfigureras:

  • Lådmaterial: definierar det material som appliceras på den renderade lådan när ingen interaktion sker. En ruta återges endast om det här materialet anges.
  • Box tog material: material för lådan när användaren interagerar med kontrollen genom att ta tag i nära eller långt interaktion.
  • Platta ut axelvisningsskala: en skala som tillämpas på lådskärmen om en av axlarna plattas ut.

Konfiguration av skalningshandtag

Med den här egenskapslådan kan du ändra beteende och visualisering av skalningshandtag för gränskontroll.

  • Hantera material: material som appliceras på handtagen.
  • Handtaget tog material: material som appliceras på det gripna handtaget.
  • Hantera prefab: valfri prefab för skalningshandtaget. Om inte anges använder MRTK en kub som standard.
  • Handtagsstorlek: storlek på skalningshandtaget.
  • Collider utfyllnad: utfyllnad för att lägga till i handtaget collider.
  • Rita tether vid manipulering: när aktiv ritar en tjuderlinje från början av interaktionen till aktuell hand eller pekarposition.
  • Referenser ignorerar collider: om en kolliderare länkas här ignorerar handtagen eventuella kollisioner med denna kolliderare.
  • Hantera skifferprefab: prefab som ska användas för handtaget när kontrollen plattas ut.
  • Visa skalningshandtag: styr referensens synlighet.
  • Skalningsbeteende: kan ställas in på enhetlig eller icke-enhetlig skalning.

Rotation hanterar konfiguration

Den här konfigurationen definierar beteendet för rotationshandtaget.

  • Hantera material: material som appliceras på handtagen.
  • Handtaget tog material: material som appliceras på det gripna handtaget.
  • Hantera prefab: valfri prefab för handtaget. Om inte anges använder MRTK en sfär som standard.
  • Referensstorlek: storleken på handtaget.
  • Collider utfyllnad: utfyllnad för att lägga till i handtaget collider.
  • Rita tether vid manipulering: när aktiv ritar en tjuderlinje från början av interaktionen till aktuell hand eller pekarposition.
  • Referenser ignorerar collider: om en kolliderare länkas här ignorerar handtagen eventuella kollisioner med denna kolliderare.
  • Hantera prefab collider typ: collider typ som ska användas med det skapade handtaget.
  • Visa referensen för X: styr referensens synlighet för X-axeln.
  • Visa referens för Y: styr referensens synlighet för Y-axeln.
  • Visa referens för Z: styr referensens synlighet för Z-axeln.

Konfiguration av översättningshandtag

Tillåter aktivering och konfigurering av översättningshandtag för gränskontroll. Observera att översättningshandtag är inaktiverade per standard.

  • Hantera material: material som appliceras på handtagen.
  • Handtaget tog material: material som appliceras på det gripna handtaget.
  • Hantera prefab: valfri prefab för handtaget. Om inte anges använder MRTK en sfär som standard.
  • Referensstorlek: storleken på handtaget.
  • Collider utfyllnad: utfyllnad för att lägga till i handtaget collider.
  • Rita tether vid manipulering: när aktiv ritar en tjuderlinje från början av interaktionen till aktuell hand eller pekarposition.
  • Referenser ignorerar collider: om en kolliderare länkas här ignorerar handtagen eventuella kollisioner med denna kolliderare.
  • Hantera prefab collider typ: collider typ som ska användas med det skapade handtaget.
  • Visa referensen för X: styr referensens synlighet för X-axeln.
  • Visa referens för Y: styr referensens synlighet för Y-axeln.
  • Visa referens för Z: styr referensens synlighet för Z-axeln.

Länkkonfigurationen aktiverar wireframe-funktionen för gränskontroll. Följande egenskaper kan konfigureras:

  • Trådblocksmaterial: det material som appliceras på trådramsnätet.
  • Trådramens kantradie: tjockleken på trådramen.
  • Trådblocksform: formen på trådramen kan antingen kubisk eller cylindrisk.
  • Visa trådram: styr synligheten för trådramen.

Konfiguration av närhetseffekt

Visa och dölj handtagen med animering baserat på avståndet till händerna. Den har animering med två stegs skalning. Standardinställningarna är inställda på HoloLens 2 stilbeteende.

Gränser styr närhet
  • Närhetseffekt aktiv: Aktivera aktivering av närhetsbaserade handtag
  • Objekt medelnärhet: Avstånd för 1:a stegets skalning
  • Närhet till objekt: Avstånd för skalning i andra steget
  • Skala långt: Standardskalningsvärdet för referenstillgången när händerna ligger utanför intervallet för gränskontrollinteraktionen (avståndet som definieras ovan av "Hantera medelnärhet". Använd 0 för att dölja referensen som standard)
  • Medelskala: Skalningsvärdet för referenstillgången när händerna ligger inom intervallet för gränskontrollinteraktionen (avståndet som definieras ovan av "Hantera närhet". Använd 1 för att visa normal storlek)
  • Stäng skala: Skalningsvärdet för referenstillgången när händerna ligger inom intervallet för interaktionen (avståndet som definieras ovan av "Hantera närhet". Använd 1.x för att visa större storlek)
  • Fjärranväxningshastighet: Betygsätt ett närhetsskalat objekt som skalar när handen flyttas från medel till fjärran.
  • Medelväxningshastighet: Betygsätt ett närhetsskalat objekt som skalar när handen flyttas från medel till nära närhet.
  • Stäng växhastighet: Betygsätt ett närhetsskalat objekt som skalar när handen flyttas från nära håll till objektcenter.

Villkorssystem

Gränskontroll stöder användning av villkorshanteraren för att begränsa eller ändra översättnings-, rotations- eller skalningsbeteende när du använder gränskontrollhandtag.

Egenskapskontrollen visar alla tillgängliga villkorshanterare som är kopplade till samma spelobjekt i en listruta med ett alternativ för att rulla och markera den valda villkorshanteraren.

Begränsningar för gränskontroll

Händelser

Gränskontrollen innehåller följande händelser. I det här exemplet används dessa händelser för att spela upp ljudfeedback.

  • Rotera startad: Utlöses när rotationen startar.
  • Rotera stoppad: Utlöses när rotationen stoppas.
  • Skalan startades: Utlöses när skalningen startar.
  • Skalan har stoppats: Utlöses när skalningen stoppas.
  • Översätt startad: Utlöses när översättningen startar.
  • Översätt stoppad: Utlöses när översättningen stoppas.
Gränser styr händelser

Elastics (experimentell)

Elastics kan användas vid manipulering av objekt via gränskontroll. Observera att det elastiska systemet fortfarande är i experimentellt tillstånd. Om du vill aktivera elastics länkar du antingen en befintlig elastics manager-komponent eller skapar och länkar en ny elastics-hanterare via Add Elastics Manager knappen.

Gränser styr elasticiteter

Hantera formatmallar

När du bara tilldelar skriptet BoundsControl.cs visas som standard referensen för HoloLens 1:a genformatet. Om du vill använda HoloLens 2 stilhandtag måste du tilldela rätt handtagsprefabs och material.

Format för gränskontrollhandtag 2

Nedan visas prefabs, material och skalningsvärden för kontrollhandtagen för HoloLens 2 formatgräns. Du hittar det här exemplet i scenen BoundsControlExamples .

Gränskontroll HandleStyles

Referenser (installation för HoloLens 2 format)

  • Hantera material: BoundingBoxHandleWhite.mat
  • Hantera gripet material: BoundingBoxHandleBlueGrabbed.mat
  • Skalningshandtag prefab: MRTK_BoundingBox_ScaleHandle.prefab
  • Skalningshandtag skiffer prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Storlek på skalningshandtag: 0,016 (1,6 cm)
  • Skala Handle Collider Utfyllnad: 0.016 (gör den gripbara collider något större än hantera visuella)
  • Rotationshandtag prefab: MRTK_BoundingBox_RotateHandle.prefab
  • Storlek på rotationshandtag: 0,016
  • Rotationshandtag collider utfyllnad: 0.016 (gör den gripbara collider något större än hantera visuella)

Transformeringsändringar med objektmanipulator

En gränskontroll kan användas i kombination med ObjectManipulator.cs för att tillåta vissa typer av manipulering (t.ex. att flytta objektet) utan att använda referenser. Manipulationshanteraren stöder både en- och tvåhandsinteraktioner. Handspårning kan användas för att interagera med ett objekt på nära håll.

Gränskontroll för objektmanipulator

För att gränskontrollkanterna ska fungera på samma sätt när du flyttar den med hjälp av ObjectManipulator"långt interaktion" rekommenderar vi att du ansluter dess händelser för Vid manipulering som startades / vid manipulation slutade till BoundsControl.HighlightWires / BoundsControl.UnhighlightWires , som du ser i skärmbilden ovan.

Så här lägger du till och konfigurerar en gränskontroll med Hjälp av Unity Inspector

  1. Lägga till Box Collider i ett objekt
  2. Tilldela BoundsControl skript till ett objekt
  3. Konfigurera alternativ, till exempel aktiveringsmetoder (se avsnittet Egenskaper för Kontroll nedan)
  4. (Valfritt) Tilldela prefabs och material för en HoloLens 2 formatgränskontroll (se avsnittet Hantera format nedan)

Anteckning

Använd fältet Åsidosättning avmålobjekt och gränser i inspektören för att tilldela specifika objekt och kolliderare i objektet med flera underordnade komponenter.

Gränskontroll

Så här lägger du till och konfigurerar en gränskontroll i koden

  1. Instansiera kub gameobject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Tilldela BoundsControl skript till ett objekt med collider med Hjälp av AddComponent<>()

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Konfigurera alternativ antingen direkt på kontrollen eller via någon av de skriptbara konfigurationerna (se avsnittet Inspector-egenskaper och konfigurationer nedan)

    // 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. (Valfritt) Tilldela prefabs och material för en HoloLens 2 formatgränskontroll. Detta kräver fortfarande tilldelningar via inspektören eftersom material och prefabriceringar ska läsas in dynamiskt.

Anteckning

Du rekommenderas inte att använda Mappen Resurser i Unity eller Shader.Find för dynamisk inläsning av skuggningar eftersom skuggningspermutationer kanske saknas vid körning.

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;

Exempel: Ange minsta, högsta gränskontrollskala med MinMaxScaleConstraint

Om du vill ange den lägsta och högsta skalan kopplar du en MinMaxScaleConstraint till din kontroll. När gränskontrollen automatiskt kopplar och aktiverar villkorshanteraren tillämpas MinMaxScaleConstraint automatiskt på omvandlingsändringarna när den har anslutits och konfigurerats.

Du kan också använda MinMaxScaleConstraint för att ange lägsta och högsta skala för 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;

Exempel: Lägga till gränskontroll runt ett spelobjekt

Om du vill lägga till en gränskontroll runt ett objekt lägger du helt enkelt till en BoundsControl komponent i det:

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

Migrera från avgränsningsruta

Befintliga prefabs och instanser med avgränsningsrutan kan uppgraderas till den nya gränskontrollen via migreringsfönstret som är en del av MRTK-verktygspaketet.

För att uppgradera enskilda instanser av avgränsningsrutan finns det också ett migreringsalternativ i komponentens egenskapskontroll.

Gränskontroll Migrera

Se även