Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Tryck på plats är en komponent för långt interaktion som används för att placera ett spelobjekt på ytan. Den här komponenten är användbar för att placera objekt på ett rumsligt nät. Tryck på plats använder en kombination av två klick och huvudförflyttning för att placera ett objekt. Ett klick för att starta placeringen, huvudets rörelse för att styra objektets position och ett klick för att placera objektet i scenen.
Använda Tryck för att placera
Konfigurera scenen
- Skapa en ny unity-scen
- Lägg till MRTK i scenen genom att gå till Mixed Reality Toolkit>Lägg till i scen och konfigurera
Anteckning
Tryck på plats använder klick som drivs av MRTK-indatasystemet, men det kan också styras utan klick. Se avsnittet Konfigurerbarhet för tryckning för att placera kod nedan.
- Lägg till en kub i scenen och ändra skalan till 0,2 och ändra positionen till (0, 0, 0,7).
Koppla tryck på plats till ett spelobjekt med en kolliderare
- När komponenten Tryck på plats läggs till kopplas även en solverhanterare. Tryck på Plats härleds från klassen Solver som kräver en solverhanterare. Positionen för ett tap to place-objekt beräknas i förhållande till
TrackedTargetType
inom solverhanteraren. Som standard är Head ,TrackedTargetType
, d.v.s. när huvudet flyttas, följer objektet om det är markerat.TrackedTargetType
kan också ställas in på Controller Ray som har objektet följer kontrollanten. Den första gruppen med egenskaper i inspektören Tryck på plats är Common Solver Properties.
Viktigt
Tryck på plats är en fristående lösare och kan inte kopplas till andra lösare. Det går inte att länka eftersom SolverHandler.UpdateSolvers används för att uppdatera objektets position medan det placeras.
- Tryck för att placera egenskaper:
-
Auto Start
: Om det är sant börjar lösaren Tryck på plats styra positionen för spelobjektet som ska placeras. Objektet börjar omedelbart följa TrackedTargetType (Head eller Controller Ray). Det här värdet måste ändras innan Start() anropas för att få någon effekt. -
Default Placement Distance
: Standardavståndet (i meter) som ett objekt placeras i förhållande till TrackedTargetType framåt i SolverHandler. Spelobjektet placeras på standardplaceringsavståndet om en yta inte träffats av raycasten. -
Max Raycast Distance
: Maxavståndet (meter) för raycasten baserat på ursprunget "TrackedTargetType". Den här raycasten letar efter en yta för att placera ett markerat objekt. -
UseDefaultSurfaceNormalOffset
: Den här egenskapen är sann som standard. Den säkerställer att objektet som placeras är justerat på en yta. Om den här egenskapen är sann tillämpas standardytans normala förskjutning i stället för ett värde som anges förSurfaceNormalOffset
egenskapen. Om värdet är falskt tillämpas värdet förSurfaceNormalOffset
. Standardytans normala förskjutning är kolliderarens utrymmen längs z-axeln. -
Surface Normal Offset
: Avståndet mellan mitten av spelet objekt att placera och en yta längs ytan normala, om raycast träffar en yta. Den här egenskapen tillämpas endast på ett -objekt omUseDefaultSurfaceNormalOffset
är falskt. -
Keep Orientation Vertical
: Om det är sant förblir spelet föremål att placera upprätt och i linje med Vector3.up. -
Rotate According to Surface
: Om det är falskt kommer spelets objekt att placera inte att ändra sin rotation enligt ytträffen. Objektet förblir vänd mot kameran medan IsBeingPlaced är sant. -
Magnetic Surfaces
: En matris med LayerMasks som ska köras från högsta till lägsta prioritet. Den första lagermasken för att tillhandahålla en raycast-träff kommer att användas för positionsberäkningar. -
Debug Enabled
: Om det är sant och i Unity Editor ritas det normala för raycast-träffen i gult. Felsökning aktiverat är användbart närRotateAccordingToSurface
är sant eftersom det ritar det normala för ytträffen, vilket visuellt förklarar varför objektet är inställt på sin aktuella orientering. -
On Placing Started
: Den här händelsen utlöses en gång när spelobjektet som ska plats väljs. -
On Placing Stopped
: Den här händelsen utlöses en gång när spelobjektet som ska placeras är avmarkerat, placerat.
-
- När komponenten Tryck på plats läggs till kopplas även en solverhanterare. Tryck på Plats härleds från klassen Solver som kräver en solverhanterare. Positionen för ett tap to place-objekt beräknas i förhållande till
Testa tryckning för att placera beteende i redigeraren
- Tryck på Spela upp och håll blankstegsfältet för att visa en indatasimuleringshand.
- Flytta handen tills kuben är i fokus och simulera ett klick med indatasimuleringshanden genom att klicka med vänster mus.
- Om colliders inte finns i scenen följer
TrackedTargetType
objektet på den definieradeDefault Placement Distance
.
- Om colliders inte finns i scenen följer
- Objektet följer efter markeringsförflyttningen
TrackedTargetType
. Om du vill simulera huvudförflyttning i redigeraren trycker du på WASD-tangenterna. Ändra rotation av huvudet genom att klicka och hålla den högra musen. - Klicka igen om du vill sluta placera objektet. Objektet behöver inte vara i fokus för stoppplaceringsklicka. Fokus krävs endast för det första klicket som startar placeringsprocessen.
TrackedTargetType
: Huvud (standard)TrackedTargetType
: Controller Ray
Tryck för att konfigurera kod
Tidsinställningen för att placera objektval kan också styras via StartPlacement()
och StopPlacement()
i stället för att kräva en klickhändelse. Den här funktionen är användbar för att skriva tester och tillhandahåller en alternativ metod för att placera ett objekt i redigeraren utan att använda MRTK-indatasystemet.
Skapa ett tomt spelobjekt
Skapa och bifoga följande exempelskript till det tomma spelobjektet
using UnityEngine; using Microsoft.MixedReality.Toolkit.Utilities.Solvers; public class TapToPlaceInputExample : MonoBehaviour { private GameObject cube; private TapToPlace tapToPlace; void Start() { cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.transform.localScale = Vector3.one * 0.2f; cube.transform.position = Vector3.forward * 0.7f; tapToPlace = cube.AddComponent<TapToPlace>(); } void Update() { if (Input.GetKeyDown(KeyCode.U)) { tapToPlace.StartPlacement(); } if (Input.GetKeyDown(KeyCode.I)) { tapToPlace.StopPlacement(); } } }
I uppspelningsläge trycker du på U-tangenten för att börja placera kuben
Tryck på tangenten I för att stoppa placeringen
Tryck för att placera exempelscen
Exempelscenen Tryck för att placera består av 4 placerbara objekt, var och en med olika konfiguration. Exempelscenen innehåller väggar för att visa beteendet för ytplacering som är inaktiverade som standard i hierarkin. Exempelscenen finns i Unity-paketet Microsoft.MixedReality.Toolkit.Unity.Examples på versionssidan. Platsen för scenen är: MRTK. Examples/Demos/Solvers/Scenes/TapToPlaceExample.unity