Dela via


Begränsningar – MRTK3

ConstraintManager gör att du kan använda en uppsättning villkorskomponenter för en transformering. Som standard samlar villkorshanteraren automatiskt in alla anslutna villkorskomponenter och tillämpar dem på målobjektet. Användare kan dock också välja att konfigurera listan över tillämpade begränsningar manuellt och endast tillåta att en delmängd av de kopplade begränsningarna används.

Anteckning

MRTK3 erbjuder för närvarande en begränsad delmängd av begränsningarna från MRTK 2.x. Vi undersöker för närvarande en refaktorisering av begränsningssystemet för att förena utvecklararbetsflödet med lösare och elasticiseringar. Håll ögonen öppna!

För närvarande stöder följande MRTK UX-element begränsningar:

Begränsningshanteraren kan köras i två lägen:

  • Autovillkorsval
  • Manuellt villkorsval

Val av villkor

Autovillkorsval

Läge för automatisk markering

Standardläget Auto visar en lista över alla anslutna villkorskomponenter. Du kan gå direkt till komponenten i inspektören med hjälp av knapparna Gå till komponent eller lägga till en ny begränsning från listrutan.

Manuellt villkorsval

Manuellt markeringsläge

Om villkorshanteraren är inställd på manuellt läge bearbetas endast begränsningar som är länkade i villkorslistan och tillämpas på transformen. När du aktiverar manuellt läge för första gången fyller hanteraren automatiskt i listan med alla för närvarande kopplade begränsningar.

Anteckning

Åtgärden Ta bort post tar bara bort villkoret från den manuella urvalslistan. Komponenten kommer fortfarande att finnas på GameObject.

Körningsordning

Körningsordningen för varje villkor kan definieras i alternativet Körningsordning för själva villkoret. Ordningen visas i listan som visas i villkorshanteraren. Vissa begränsningar beter sig annorlunda när de kombineras i olika ordningar, så tänk på prioriteringarna för varje begränsning och justera deras ordning därefter.

Transformeringsbegränsningar

Du kan använda begränsningar för att begränsa manipulering på något sätt. Vissa program kan till exempel kräva rotation och att objektet förblir upprätt. I det här fallet kan en RotationAxisConstraint läggas till i objektet och användas för att begränsa rotationen till y-axelrotation. MRTK innehåller flera begränsningar, som alla beskrivs nedan.

Det går också att definiera nya begränsningar och använda dem för att skapa unika manipulationsbeteenden som kan behövas för vissa program. Det gör du genom att skapa ett skript som ärver från TransformConstraint och implementerar den abstrakta ConstraintType egenskapen och den abstrakta ApplyConstraint metoden. Den nya begränsningen bör visas i listrutan och bör registreras i villkorshanteraren automatiskt när den läggs till i objektet.

Alla begränsningar som tillhandahålls av MRTK delar följande egenskaper:

Handtyp anger om villkoret används för enhands-, tvåhands- eller båda typerna av manipulering. Eftersom den här egenskapen är en flagga kan båda alternativen väljas.

  • Enhands: Villkor används under enhandsmanipulering om den väljs.
  • Tvåhänta: Villkor används under tvåhandsmanipulering om det väljs.

ProximityType anger om begränsningen används för nära, långt eller båda typerna av manipulering. Eftersom den här egenskapen är en flagga kan båda alternativen väljas.

  • Nära: Villkoret används vid nära manipulering om det väljs.
  • Långt: Villkoret används vid långt manipulering om det väljs.

FaceUserConstraint

Den här begränsningen begränsar rotationen av ett objekt så att det alltid kommer att möta användaren. Alternativet Face Away styr om den positiva eller negativa Z-axeln används.

Demonstration av FaceUserConstraint

FixedDistanceConstraint

Den här begränsningen åtgärdar avståndet mellan det manipulerade objektet och en annan objekttransformering vid manipuleringsstart. Detta är användbart för beteenden som att fastställa avståndet från det manipulerade objektet till huvudtransformeringen. Fältet Villkorstransformering är som standard kameratransformering och är den andra transform som det manipulerade objektet har ett fast avstånd till.

Demonstration av FixedDistanceConstraint

MaintainApparentSizeConstraint

När den här begränsningen är kopplad till ett objekt, oavsett hur långt objektet kommer från användaren, kommer det att behålla samma synliga storlek för användaren (dvs. det kommer att ta upp samma andel av användarens synfält). Detta kan användas för att säkerställa att en skiffer- eller textpanel förblir läsbar under manipulering.

Demonstration av MaintainApparentSizeConstraint

MoveAxisConstraint

Den här begränsningen kan användas för att korrigera längs vilka axlar ett manipulerat objekt kan flyttas. Detta kan vara användbart för att manipulera objekt över ytan på ett plan eller längs en linje.
Fältet Begränsning för förflyttning anger vilka axlar som ska förhindra förflyttning. Som standard är dessa axlar globala snarare än lokala, men de kan ändras nedan. Eftersom den här egenskapen är en flagga kan du välja valfritt antal alternativ.

Demonstration av MoveAxisConstraint

MinMaxScaleConstraint

Den här begränsningen begränsar skalan för ett objekt, vilket är användbart för att hindra användare från att skala objekt till oanvändbart små eller stora storlekar. Den fungerar både för referensbaserad skalning (med BoundsControl) och med tvåhands direktskalning (med ObjectManipulator). Alternativet Relativt till ursprungligt tillstånd definierar om de specifika minsta och högsta skalningsvärdena är absoluta värden eller om de multipliceras på objektets ursprungliga skala.

Demonstration av MinMaxScaleConstraint

RotationAxisConstraint

Den här begränsningen kan användas för att åtgärda vilka axlar ett manipulerat objekt kan roteras på. Detta kan vara användbart för att hålla ett manipulerat objekt upprätt, men ändå tillåta y-axelrotationer, till exempel.
Fältet Begränsning för rotation anger vilka axlar som ska förhindra rotation. Som standard är dessa axlar globala snarare än lokala, men de kan ändras nedan. Eftersom den här egenskapen är en flagga kan du välja valfritt antal alternativ.

Demonstration av RotationAxisConstraint