Gränskontroll – MRTK2
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
.
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:
- Hanterar
- Länkar/Trådram
- Visa ruta
- Närhetseffekt
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änkkonfiguration (trådram)
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.
- 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.
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.
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.
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.
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
.
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.
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
- Lägga till Box Collider i ett objekt
- Tilldela
BoundsControl
skript till ett objekt - Konfigurera alternativ, till exempel aktiveringsmetoder (se avsnittet Egenskaper för Kontroll nedan)
- (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.
Så här lägger du till och konfigurerar en gränskontroll i koden
Instansiera kub gameobject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Tilldela
BoundsControl
skript till ett objekt med collider med Hjälp av AddComponent<>()private BoundsControl boundsControl; boundsControl = cube.AddComponent<BoundsControl>();
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;
(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.