Avgränsningsruta – MRTK2

Markeringsramen

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 .

Exempel på avgränsningsruta

Lägga till och konfigurera en avgränsningsruta med Unity Inspector

  1. Lägga till Box Collider i ett objekt
  2. Tilldela BoundingBox 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 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.

Avgränsningsruta 1

Så här lägger du till och konfigurerar en avgränsningsruta i koden

  1. Instansiera kub gameobject

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

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. 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;
    
  4. (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.
Händelser

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.

Handtagsformat för avgränsningsruta

Nedan visas prefabs, material och skalningsvärden för HoloLens 2 format avgränsningsboxhandtag. Du hittar det här exemplet i scenen BoundingBoxExamples .

HandStyles 2

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.

Direkt från källan
  • 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.

Manipulationshanterare

För att avgränsningsrutans kanter ska bete sig på samma sätt när den flyttas med hjälp av ManipulationHandlerden 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.

Bounds Control Migrate