Avgränsningsruta – MRTK2
Anteckning
Avgränsningsrutan är inaktuell och ersätts av dess efterföljande gränskontroll. Använd något av migreringsalternativen för att uppgradera befintliga spelobjekt.
Skriptet BoundingBox.cs
tillhandahåller grundläggande funktioner för att transformera objekt i mixad verklighet. En avgränsningsruta visar en kub runt hologrammet för att indikera att den kan interageras med. Handtag i hörnen och kanterna på kuben tillåter skalning eller rotation av objektet. Avgränsningsrutan reagerar också på användarindata. På HoloLens 2 svarar till exempel avgränsningsrutan 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.
Mer information finns i Avgränsningsruta och Appfält i Windows Dev Center.
Exempelscen
Du hittar exempel på konfigurationer av avgränsningsrutor i scenen BoundingBoxExamples
.
Lägga till och konfigurera en avgränsningsruta med Unity Inspector
- Lägga till Box Collider i ett objekt
- Tilldela
BoundingBox
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 stil avgränsningsruta (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 avgränsningsruta i koden
Instansiera kub gameobject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Tilldela
BoundingBox
skript till ett objekt med collider med Hjälp av AddComponent<>()private BoundingBox bbox; bbox = cube.AddComponent<BoundingBox>();
Konfigurera alternativ (se avsnittet Egenskaper för kontroll nedan)
// Make the scale handles large bbox.ScaleHandleSize = 0.1f; // Hide rotation handles bbox.ShowRotationHandleForX = false; bbox.ShowRotationHandleForY = false; bbox.ShowRotationHandleForZ = false;
(Valfritt) Tilldela prefabs och material för en HoloLens 2 avgränsningsruta. Detta kräver fortfarande tilldelningar via inspektören eftersom material och prefabs ska läsas in dynamiskt.
Anteckning
Du rekommenderas inte att använda Unitys resursmapp eller Shader.Find för dynamiskt inläsning av skuggningar eftersom skuggningspermutationer kanske saknas vid körning.
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;
Exempel: Ange minsta, högsta avgränsningsruteskala med MinMaxScaleConstraint
Om du vill ange minsta och högsta skala använder du MinMaxScaleConstraint
. Du kan också använda MinMaxScaleConstraint för att ange lägsta och högsta skala för 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;
Exempel: Lägg till avgränsningsruta runt ett spelobjekt
Om du vill lägga till en avgränsningsruta runt ett objekt lägger du helt enkelt till en BoundingBox
komponent i det:
private void PutABoxAroundIt(GameObject target)
{
target.AddComponent<BoundingBox>();
}
Egenskaper för kontroll
Målobjekt
Den här egenskapen anger vilket objekt som ska transformeras av avgränsningsrutan. Om inget objekt har angetts är avgränsningsrutan standard för ägarobjektet.
Åsidosättning av gränser
Anger en ruta som kolliderar från objektet för beräkningen av gränser.
Aktiveringsbeteende
Det finns flera alternativ för att aktivera avgränsningsrutegränssnittet.
- Aktivera vid start: Avgränsningsrutan blir synlig när scenen har startats.
- Aktivera med närhet: Avgränsningsrutan blir synlig när en ledad hand ligger nära objektet.
- Aktivera med pekare: Avgränsningsrutan blir synlig när den riktas mot en handstrålepekare.
- Aktivera manuellt: Avgränsningsrutan visas inte automatiskt. Du kan aktivera den manuellt via ett skript genom att komma åt egenskapen boundingBox.Active.
Skalningsminimum
Minsta tillåtna skala. Den här egenskapen är inaktuell och det är bättre att lägga till ett MinMaxScaleConstraint
skript. Om det här skriptet läggs till tas den minsta skalan från det i stället för från avgränsningsrutan.
Skala maximalt
Den maximala tillåtna skalan. Den här egenskapen är inaktuell och det är bättre att lägga till ett MinMaxScaleConstraint
skript. Om det här skriptet läggs till tas den maximala skalan från det i stället för från avgränsningsrutan.
Visning av ruta
Olika visualiseringsalternativ för avgränsningsrutor.
Om Platta ut axel är inställd på Platta ut automatiskt tillåter skriptet inte manipulering längs axeln med minsta möjliga utsträckning. Detta resulterar i en 2D-avgränsningsruta, som vanligtvis används för tunna objekt.
Hanterar
Du kan tilldela material och prefab för att åsidosätta referensformatet. Om inga referenser har tilldelats visas de i standardformatet.
Händelser
Avgränsningsrutan 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 avslutad: Utlöses när rotationen slutar.
- Skalan startades: Utlöses när skalningen startar.
- Skalan avslutades: Utlöses när skalningen slutar.
Hantera formatmallar
När du bara tilldelar skriptet BoundingBox.cs
visas som standard handtaget för HoloLens 1:a generationens formatmall. Om du vill använda HoloLens 2 formathandtag måste du tilldela rätt handtagsprefabs och material.
Nedan visas prefabs, material och skalningsvärden för HoloLens 2 format avgränsningsboxhandtag. Du hittar det här exemplet i scenen BoundingBoxExamples
.
Handtag (installation för HoloLens 2 format)
- Hantera material: BoundingBoxHandleWhite.mat
- Hantera gripet material: BoundingBoxHandleBlueGrabbed.mat
- Skalningshandtag prefab: MRTK_BoundingBox_ScaleHandle.prefab
- Skalhandtag skiffer prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
- Storlek på skalhandtag: 0,016 (1,6 cm)
- Skala Handle Collider Utfyllnad: 0.016 (gör den greppbara kollideraren något större än att hantera visuella objekt)
- Rotationshandtag prefab: MRTK_BoundingBox_RotateHandle.prefab
- Storlek på rotationshandtag: 0,016
- Rotationshandtag Collider Utfyllnad: 0.016 (gör att den greppbara kollideraren är något större än det visuella handtagsobjektet)
Närhet (installation för HoloLens 2 format)
Visa och dölj handtagen med animering baserat på avståndet till händerna. Den har tvåstegs skalningsanimering.
- Närhetseffekt aktiv: Aktivera närhetsbaserad handtagsaktivering
- Hantera medelhög närhet: Avstånd för 1:a stegets skalning
- Hantera närhet: 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 avgränsningsrutans interaktion (avstånd som definieras ovan av "Handle Medium Proximity". Använd 0 för att dölja handtag som standard)
- Medelskala: Skalningsvärdet för referenstillgången när händerna ligger inom intervallet för avgränsningsrutans interaktion (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)
Göra ett objekt flyttbart med manipuleringshanteraren
En avgränsningsruta kan kombineras med ManipulationHandler.cs
för att göra objektet flyttbart med hjälp av långt interaktion. 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 avgränsningsrutans kanter ska bete sig på samma sätt när den flyttas med hjälp av ManipulationHandler
den avlägsna interaktionen rekommenderar vi att du ansluter dess händelser för On Manipulation Started / On Manipulation Ended till BoundingBox.HighlightWires
/ BoundingBox.UnhighlightWires
respektive, som du ser i skärmbilden ovan.
Migrera till gränskontroll
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.