Partager via


Configuration du déplacement et de la téléportation des avatars

Vue d’ensemble

Pour que les avatars Mesh se déplacent et se téléportent correctement dans votre expérience, il est important de suivre certaines instructions de conception. Cet article contient des informations sur la configuration des surfaces pour le déplacement et la téléportation, des conseils sur des éléments tels que les limites de déplacement des avatars et la conception d’un collisionneur, ainsi qu’une section détaillée sur les calques.

Guide de déplacement d’avatar

Une scène doit avoir des collisionneurs pour que l’avatar marche et se téléporte. En général, un collisionneur de maillage poly faible qui s’adapte étroitement à la géométrie visuelle produit les meilleurs résultats. Les collisionneurs de boîtes fonctionnent très bien pour les scénarios trivials, mais peuvent entraîner des problèmes tels que le blocage de l’avatar dans les coins ou la défaite des limites de hauteur d’étape.

Limites de déplacement de l’avatar de maillage :

Pente maximale accessible à pied : <45 degrés
Hauteur maximale de l’étape : 0,3
Rayon de la capsule avatar : 0,3
Hauteur de la capsule avatar : 2
Hauteur de l’avatar : 1,8

Suggestions pour obtenir de meilleurs résultats :

  • Alignez les surfaces de collision sur les surfaces visuelles sur laquelle l’avatar marchera. Cela est important afin d’éviter les problèmes liés à la position de l’avatar par rapport à la surface visuelle (pour empêcher le flottement ou le découpage).

  • Les coins arrondis aident à lisser le mouvement de l’avatar et empêchent l’avatar de se bloquer.

  • Pour bloquer le déplacement de l’avatar, utilisez des pentes abruptes ou une hauteur beaucoup plus grande que la hauteur maximale du pas.

    • Modifiez la forme de vos collisionneurs pour créer des surfaces naturellement difficiles ou impossibles à traverser par l’avatar. Pour instance, utilisez un Mesh Collider avec une forme irrégulière qui ne fournit pas de surface plane ou de pente accessible pour que l’avatar se dresse.

    • Dans certains cas, un collisionneur de capsule ou une forme arrondie similaire sur des objets ou des zones sur lesquels l’avatar ne doit pas marcher peut suffire. Ces formes sont indéambulables si la pente est assez raide et entraînent le glissement de l’avatar.

Couches de collision

Les objets interagissants sont des GameObjects avec un collisionneur sans déclencheur et une géométrie visuelle correspondante sur l’une des couches d’objet entrant en collision. Avatars pouvez marcher et être positionnés sur des objets avec des collisionneurs non-déclencheurs. Soyez donc conscient de la couche utilisée.

Pour disposer d’un positionnement et d’une téléportation précis des avatars, les collisionneurs de scène doivent se trouver sur les couches appropriées. L’avatar de l’utilisateur local interagit avec (entrer en collision avec et marcher sur) tous les collisionneurs sur les couches qui prennent en charge ces interactions.

Lorsque l’avatar est positionné ou téléporté, il est important que l’avatar entre en collision avec un objet « au sol » et soit constamment placé à la même hauteur au-dessus du sol (ce qui est appelé « mise à la terre »). Si aucun sol n’est détecté, l’avatar tombe. Cela est acceptable si au-dessus du sol (il n’y a pas de dégâts de chute !), mais si l’avatar est placé sous l’objet « au sol », l’avatar peut ne pas enregistrer une collision avec cet objet, le faisant tomber hors de l’environnement et respawn. Si l’avatar pénètre dans le sol lors du repositionnement, il sera mis à la terre.

Tous les avatars d’une session doivent être à une hauteur cohérente. La position de l’avatar est ajustée si sa hauteur change hors de portée. Par exemple :

  • Un utilisateur VR se rend physiquement vers et depuis une position assise ou debout. Le mouvement HMD fait que l’avatar de la scène pénètre dans le sol ou se tient beaucoup plus haut verticalement que les autres avatars.

  • Un script visuel mal configuré téléporte l’avatar dans une position qu’il ne tient pas ou qu’il est verticalement trop bas.

Une autre raison est que lorsque la mise à jour de la physique de l’avatar, si l’avatar n’est pas mis à la terre, il saute en position à la suite d’une collision de sa capsule avec le sol et le yaning de l’avatar dans la nouvelle position. Cela est particulièrement impactant pour les utilisateurs de HMD, car des mouvements non naturels comme celui-ci peuvent être anxiogènes.

Couches avec lesquelles l’avatar interagit et peut marcher sur :

0 - Valeur par défaut
2 - Ignorer Raycast
4 - Eau (seuls les collisionneurs de déclenchement autorisés, non accessibles)
14 - GroundCollision (téléportable)
18 - TriggerVolume (seuls les collisionneurs de déclencheur sont autorisés, non accessibles à pied)
21 - IgnoreObjects
26 - Personnalisé26
27 - Personnalisé27
28 - Custom28
29 - IgnoreRealtimeLight
30 - WallCollision

En savoir plus sur Les couches dans un projet Mesh.

Prise en charge de la téléportation

Pour qu’une scène prend en charge la téléportation, les surfaces téléportables (par exemple, le plancher ou le sol) doivent avoir des collisionneurs sur la couche GroundCollision . Il existe d’autres couches accessibles à pied, mais seule GroundCollision est téléportable. La géométrie visuelle n’est pas téléportable et ne doit pas se trouver sur la couche GroundCollision ; seuls les collisionneurs peuvent se trouver sur cette couche. La superposition et la collision incorrectes ou incohérentes peuvent entraîner des effets indésirables lors de la téléportation ou de la recherche du sol.

Une surface téléportable doit remplir les conditions suivantes :

  • Il doit avoir un type de collisionneur non déclencheur attaché (par exemple, un collisionneur de maillage ou un collisionneur de boîtes).
  • Sa couche doit être définie sur GroundCollision.

Méfiez-vous des plafonds bas ou des tunnels ; ceux-ci pourraient affecter la mise à la terre des avatars et la téléportation. Par exemple, la physique de l’avatar ou l’arc de téléportation peut se croiser ou interagir avec le collisionneur au-dessus d’eux. La hauteur du sol au toit pour une zone traversante doit être supérieure à la hauteur de la capsule d’avatar de 2m. Il doit y avoir une petite mémoire tampon d’espace au-dessus de la tête de l’avatar, surtout si le toit est incliné au lieu d’être plat.

La physique de la locomotion permet un mouvement d’avatar en douceur avec tous les collisionneurs interagissants des participants et empêche la pénétration de zones trop petites pour la collision d’avatars. Toutefois, la collision au sol non autorisée ou la géométrie problématique de l’environnement comme les formes de coin ou les espaces très étroits peuvent potentiellement provoquer la pénétration de l’avatar ou de la caméra dans des objets ou se coincer. Il est essentiel que vous testiez soigneusement toutes les surfaces accessibles à pied et téléportables.

Calques en détail

Couches d’objets

Lorsqu’un GameObject a un collisionneur non déclencheur, il entre en collision avec d’autres objets s’il se trouve sur l’une des couches d’objets.

0 - Valeur par défaut
2 - Ignorer Raycast
4 - Eau (seuls les collisionneurs de déclenchement autorisés)
14 - GroundCollision
18 - TriggerVolume (seuls les collisionneurs de déclencheur autorisés)
20 - ObjectCollision
26 - Personnalisé26
27 - Personnalisé27
28 - Custom28
29 - IgnoreRealtimeLight
30 - WallCollision
31 - IgnoreParticipant

La couche par défaut dans Unity est (sans surprise) nommée « Par défaut », vous devrez peut-être utiliser une autre couche si vous ne souhaitez pas interagir avec d’autres objets. Par exemple, IgnoreParticipant est utilisé pour les objets qui ne doivent pas interagir avec l’avatar et IgnoreCollisions est utilisé pour les objets qui ne doivent pas interagir avec quoi que ce soit.

Quelques couches importantes

Par défaut

S’il n’est pas spécifié autrement, un collisionneur se trouvera sur la couche Par défaut . Il s’agit d’une couche accessible à pied, et l’avatar sera correctement mis à la terre. Il ne s’agit pas d’une cible de téléportation valide pour l’utilisateur local. Cette couche interagit et entre en collision avec d’autres objets.

GroundCollision

Seuls les collisionneurs de la couche GroundCollision sont des cibles de téléportation valides pour l’utilisateur local. Elle est par ailleurs identique à la couche par défaut .

La géométrie visuelle non soutenue par la collision n’est pas accessible à pied et ne bloque pas l’avatar. Il s’agit donc d’une cible de téléportation incorrecte et ne doit pas être sur la couche GroundCollision .

WallCollision

La couche WallCollision est utilisée pour indiquer les murs que l’avatar ne doit pas pénétrer afin de limiter l’avatar dans un espace jouable. Les utilisateurs de réalité virtuelle peuvent déplacer leurs avatars de manière arbitraire avec des mouvements HMD lors de la locomotion à l’échelle de la pièce et peuvent marcher physiquement à travers un mur virtuel. L’avatar sera téléporté aux limites de l’aire de jeu après avoir parcouru une distance définie. Sinon, cette couche est identique à la couche Par défaut .

Définitions de couches

Voici une liste de couches définies par ID et nom, y compris la sémantique de blocage et la description :

  1. Default

    [Avatar/Object/Raycast Blocking]

    Utilisé pour la collision et l’éclairage. Un avatar peut marcher dessus, mais pas se téléporter dessus. Valeur par défaut pour la plupart des accessoires. Les objets de la couche Par défaut reçoivent la lumière directionnelle en temps réel de l’environnement.

  2. TransparentFX

    [Non bloquant]

    Gestion spéciale dans le pipeline de rendu d’Unity pour les objets transparents et effets spéciaux ; garantit un ordre de rendu correct pour la transparence.

  3. IgnoreRaycast

    [Avatar/Blocage d’objet]

    Couche prenant en charge les collisions qui ne bloque pas les raycasts, telles que les objets non interagissants ou les murs invisibles que les avatars ne peuvent pas passer, mais les objets physiques peuvent passer (par exemple, les garde-fous que les objets peuvent être jetés au-dessus, mais les avatars ne peuvent pas passer au-dessus).

  4. n/a

  5. Water (Eau)

    [Non bloquant]

    Spécifiquement pour les surfaces d’eau. Peut être utilisé pour le rendu spécialisé et les interactions physiques avec l’eau. N’utilisez pas avec des collisionneurs non déclencheurs.

  6. n/a

  7. n/a

  8. n/a

  9. n/a

  10. n/a

  11. n/a

  12. n/a

  13. n/a

  14. n/a

  15. GroundCollision

    [Avatar/Object/Raycast Blocking]

    Utilisé pour les surfaces de collision accessibles à pied qui PEUVENT être téléportées. Remarque : Dans les versions antérieures de Mesh Toolkit, il s’agissait de la couche « NavMesh ».

  16. n/a

  17. n/a

  18. IgnoreCollisions

    [Non bloquant]

    N’interagit avec rien. Peut découper l’environnement et d’autres objets.

  19. TriggerVolume

    [Non bloquant]

    Couche pour les objets qui ne doivent pas être affectés par la physique ou les raycasts et qui n’ont pas d’utilisation spéciale dans le cas contraire. N’utilisez pas sur les objets avec des collisionneurs sans déclencheur.

  20. n/a

  21. ObjectCollision

    [Blocage d’objets]

    Couche pour entrer en collision avec des objets, mais pas avec l’avatar ou les raycasts.

  22. IgnoreObjects

    [Blocage de l’avatar/raycast]

    Couche à entrer en collision avec l’avatar, mais pas avec les objets.

  23. RaycastOnly

    [Raycast Blocking]

    Couche pour les objets qui bloquent les raycasts ou peuvent être sélectionnés, mais n’affectent pas la collision d’avatar ou d’objet.

  24. n/a

  25. n/a

  26. n/a

  27. Custom26

    [Avatar/Object/Raycast Blocking]

    Couche personnalisée définie par l’utilisateur.

  28. Custom27

    [Avatar/Object/Raycast Blocking]

    Couche personnalisée définie par l’utilisateur.

  29. Custom28

    [Avatar/Object/Raycast Blocking]

    Couche personnalisée définie par l’utilisateur.

  30. IgnoreRealtimeLight

    [Avatar/Object/Raycast Blocking]

    Spécifiez les objets d’art de l’environnement ne reçoivent pas de lumière directionnelle en temps réel, comme la plupart des objets statiques (utilisez l’éclairage baked à la place avec le lightmap).

  31. WallCollision

    [Avatar/Object/Raycast Blocking]

    Collision qui empêche le découpage d’une scène. Si un utilisateur HMD se colle la tête à travers le mur, il est respawned à un emplacement proche sur la zone jouable.

  32. IgnoreParticipant

    [Blocage de l’objet/raycast]

    Objets qui bloquent les raycasts et d’autres objets, mais pas les avatars.

Interactions de couche et table

Interactions de couche

Capture d’écran de la matrice de collision de couche.

Table Calques

Explication des quatre codes de couleur dans la table Layers qui suit.

Tableau montrant les attributs de toutes les couches disponibles.