Dela via


Konfigurera för avatarförflyttning och teleportering

Översikt

För att Mesh-avatarer ska kunna flytta runt och teleportera i din upplevelse är det viktigt att följa vissa designriktlinjer. Den här artikeln innehåller information om hur du konfigurerar ytor för rörelse och teleportering, tips för saker som avatarförflyttningsgränser och colliderdesign och ett detaljerat avsnitt om Lager.

Avatar rörelse vägledning

En scen borde ha Colliders för avataren att gå och teleportering på. I allmänhet ger en nätkollider med låg poly som passar den visuella geometrin det bästa resultatet. Box Colliders fungerar bra för triviala scenarier, men kan resultera i vissa problem som att få avataren att fastna i hörnen eller besegra steghöjdsgränser.

Mesh avatar rörelsegränser:

Maximal gångbar lutning: <45 grader
Maximal steghöjd: 0,3
Avatar kapselradie: 0,3
Avatar kapsel höjd: 2
Avatarhöjd: 1,8

Förslag på bästa resultat:

  • Justera kollisionsytorna med de visuella ytor som avataren kommer att gå på. Detta är viktigt för att undvika problem med avatarens position i förhållande till den visuella ytan (för att förhindra flytande eller urklipp).

  • Rundade hörn hjälper till att jämna ut avatar rörelse och förhindra avataren från att fastna.

  • Om du vill blockera avatarrörelser använder du branta lutningar eller en höjd som är mycket större än den maximala steghöjden.

    • Ändra formen på dina kolliderare för att skapa ytor som är naturligt svåra eller omöjliga för avataren att passera. Använd till exempel en Mesh Collider med en oregelbunden form som inte ger en plan yta eller gångbar lutning för avataren att stå på.

    • I vissa fall kan en Capsule Collider eller liknande rundad form på objekt eller områden som avataren inte ska gå på räcka. Dessa former är ogångbara om lutningen är tillräckligt brant och kommer att få avataren att glida av.

Kollisionslager

Interaktionsbara objekt är GameObjects med en icke-utlösare och motsvarande visuell geometri på ett av de objekt som kolliderar med lagren. Avatarer kan gå och placeras på objekt med icke-utlösande kolliderare, så var medveten om vilket lager som används.

För att ha korrekt avatar positionering och teleportering, scen kolliderare måste vara på rätt lager. Den lokala användarens avatar interagerar med (kolliderar med och går vidare) eventuella kolliderare i de lager som stöder dessa interaktioner.

När avataren är placerad eller teleporterad är det viktigt att avataren kolliderar med ett "markobjekt" och konsekvent placeras på samma höjd över marken (detta kallas "jordning"). Om ingen mark upptäcks kommer avataren att falla. Detta är acceptabelt om ovan jord (det finns ingen fallande skada!), men om avataren placeras under "marken" objektet, avataren kan misslyckas med att registrera en kollision med det objektet, vilket gör att den faller ut ur miljön och respawn. Om avataren tränger in i marken under ompositioneringen, kommer den att jordas.

Alla avatarer i en session bör vara på en konsekvent höjd. Avatarpositionen justeras om dess höjd ändras utom räckhåll. Exempel:

  • En VR-användare går fysiskt till och från en sittande eller stående position. HMD-rörelsen gör att avataren i scenen penetrerar marken eller står mycket högre vertikalt än andra avatarer.

  • Ett dåligt konfigurerat visuellt skript teleportrar avataren till en position där de inte passar eller är lodrätt för låga.

En annan anledning till att detta är viktigt är att när avatar fysik uppdatering, om avataren inte är jordad, det kommer att hoppa på plats som ett resultat av dess kapsel kolliderar med marken och yanking avataren i den nya positionen. Detta är särskilt effektfullt för HMD-användare eftersom onaturliga rörelser som denna kan vara illamående-inducerande.

Lager som avataren interagerar med och kan gå vidare:

0 – Standard
2 – Ignorera Raycast
4 - Vatten (endast utlösare kolliderare tillåts, inte gångbar)
14 – GroundCollision (teleporterbar)
18 – TriggerVolume (endast utlösarkollider tillåts, inte gångbar)
21 – IgnoreObjects
26 – Anpassad 26
27 – Anpassad 27
28 – Anpassad 28
29 – IgnoreRealtimeLight
30 - WallCollision

Läs mer om Lager i ett Mesh-projekt.

Stöd för teleportering

För att en scen ska stödja teleportering måste teleporterbara ytor (till exempel golvet eller marken) ha kolliderare på GroundCollision-lagret . Det finns andra gångbara lager, men endast GroundCollision kan teleporteras. Visuell geometri är inte teleporterbar och bör inte finnas på GroundCollision-lagret . endast Colliders kan vara på det lagret. Felaktig eller inkonsekvent skiktning och kollision kan orsaka oönskade effekter när du teleporterar eller hittar marken.

En teleporterbar yta måste uppfylla följande villkor:

  • Den måste ha någon typ av icke-utlösare som är ansluten till Collider (till exempel en Mesh Collider eller Box Collider).
  • Dess lager måste vara inställt på GroundCollision.

Var försiktig med låga tak eller tunnlar. dessa kan potentiellt påverka avatar jordning och teleportering. Till exempel kan avatarfysik eller teleportbågen korsa eller interagera med kollideraren ovanför dem. Höjden från mark till tak för ett bläddrbart område bör vara mer än 2m avatar kapselns höjd. Det måste finnas en liten buffert av utrymme ovanför avatarens huvud, särskilt om taket är sluttande istället för platt.

Rörelsefysiken ger en smidig avatarrörelse med alla deltagare som interagerar med kolliderare och förhindrar intrång i områden som är för små för avatarkollision. Men oseriösa markkollisioner eller problematisk miljögeometri som kilformer eller mycket smala utrymmen kan potentiellt orsaka att avataren eller kameran tränger in i föremål eller fastnar. Det är viktigt att du noggrant testar alla gångbara och teleporterbara ytor.

Lager i detalj

Objektskikt

När en GameObject har en icke-utlösare kolliderar den med andra objekt om den finns på ett av objektskikten.

0 – Standard
2 – Ignorera Raycast
4 - Vatten (endast utlösare kolliderare tillåts)
14 – GroundCollision
18 – TriggerVolume (endast utlösarkollider tillåts)
20 – ObjectCollision
26 – Anpassad 26
27 – Anpassad 27
28 – Anpassad 28
29 – IgnoreRealtimeLight
30 - WallCollision
31 – IgnoreParticipant

Standardskiktet i Unity heter (inte överraskande) "Standard", så du kan behöva använda ett annat lager om du inte vill interagera med andra objekt. IgnoreParticipant används till exempel för objekt som inte ska interagera med avataren och IgnoreCollisions används för objekt som inte ska interagera med någonting.

Några viktiga lager

Standard

Om inget annat anges finns en Collider på standardskiktet . Detta är ett gångbart lager, och avataren kommer att vara korrekt jordad. Det är inte ett giltigt teleporteringsmål för den lokala användaren. Det här lagret interagerar och kolliderar med andra objekt.

GroundCollision

Endast kolliderare på GroundCollision-lagret är giltiga teleporteringsmål för den lokala användaren. Det är annars identiskt med standardskiktet .

Visuell geometri som inte backas upp med kollision är inte gångbar och blockerar inte avataren, så det är ett felaktigt teleporteringsmål och bör inte vara på GroundCollision-lagret .

WallCollision

WallCollision-lagret används för att indikera väggar som avataren inte borde penetrera för att begränsa avataren inom ett spelbart utrymme. VR-användare kan flytta sina avatarer på godtyckliga sätt med HMD-rörelse under rörelse i rumsskala och kan fysiskt gå genom en virtuell vägg. Avataren kommer att teleporteras tillbaka till gränserna för lekplatsen efter att den har gått ett visst avstånd. Det här lagret är annars identiskt med standardskiktet .

Lagerdefinitioner

Följande är en lista över lager som definierats av ID och namn, inklusive blockering av semantik och beskrivning:

  1. Standardvärde

    [Avatar/Objekt/Raycast-blockering]

    Används för kollision och belysning. En avatar kan gå på den, men inte teleportering på den. Standard för de flesta rekvisita. Objekt på standardlagret tar emot realtidsriktningsljus från miljön.

  2. TransparentFX

    [Blockerar inte]

    Särskild hantering i Unitys återgivningspipeline för transparenta objekt och specialeffekter; säkerställer korrekt återgivningsordning för transparens.

  3. IgnoreRaycast

    [Avatar/objektblockering]

    Kollisionsaktiverat lager som inte blockerar raycasts, till exempel icke-interaktionsbara objekt eller osynliga väggar som avatarer inte kan passera, men fysikobjekt kan passera (till exempel räcken som objekt kan kastas över, men avatarer kan inte hoppa över).

  4. saknas

  5. Vatten

    [Blockerar inte]

    Specifikt för vattenytor. Kan användas för specialiserade återgivnings- och fysikinteraktioner med vatten. Använd inte med icke-utlösare.

  6. saknas

  7. saknas

  8. saknas

  9. saknas

  10. saknas

  11. saknas

  12. saknas

  13. saknas

  14. saknas

  15. GroundCollision

    [Avatar/Objekt/Raycast-blockering]

    Används för gångbara kollisionsytor som KAN teleporteras till. Obs! I tidigare versioner av Mesh Toolkit var detta "NavMesh"-lagret.

  16. saknas

  17. saknas

  18. IgnoreCollisions

    [Blockerar inte]

    Interagerar inte med någonting. Kan klippa igenom miljön och andra objekt.

  19. TriggerVolume

    [Blockerar inte]

    Lager för objekt som inte ska påverkas av fysik eller raycasts och som inte har någon särskild användning annars. Använd inte på objekt med icke-utlösare.

  20. saknas

  21. ObjectCollision

    [Objektblockering]

    Lager för att kollidera med objekt men inte avatar eller raycasts.

  22. IgnoreObjects

    [Avatar/Raycast Blockering]

    Lager för att kollidera med avatar men inte objekt.

  23. RaycastOnly

    [Raycast-blockering]

    Lager för objekt som blockerar raycasts eller kan väljas men inte påverkar avatar eller objektkollision.

  24. saknas

  25. saknas

  26. saknas

  27. Anpassad 26

    [Avatar/Objekt/Raycast-blockering]

    Användaranpassat lager.

  28. Anpassad 27

    [Avatar/Objekt/Raycast-blockering]

    Användaranpassat lager.

  29. Anpassad 28

    [Avatar/Objekt/Raycast-blockering]

    Användaranpassat lager.

  30. IgnoreRealtimeLight

    [Avatar/Objekt/Raycast-blockering]

    Ange vilka konstobjekt i miljön som inte ska ta emot realtidsljus, till exempel de flesta statiska objekt (använd bakad belysning i stället med ljuskartan).

  31. WallCollision

    [Avatar/Objekt/Raycast-blockering]

    Kollision som förhindrar klippning genom en scen. Om en HMD-användare sticker huvudet genom väggen, blir de respawned till en närliggande plats på det spelbara området.

  32. IgnoreParticipant

    [Objekt-/Raycast-blockering]

    Objekt som blockerar raycasts och andra objekt, men inte avatarer.

Lagerinteraktioner och tabell

Lagerinteraktioner

En skärmdump av lagerkollisionsmatrisen.

Lagertabell

En förklaring av de fyra färgkoderna i tabellen Lager som följer.

En tabell som visar attributen för alla tillgängliga lager.