Configurar o movimento e a teletransporte do avatar
Descrição Geral
Para que os avatares do Mesh se movam e teleportem com êxito na sua experiência, é importante seguir determinadas diretrizes de design. Este artigo contém informações sobre como configurar superfícies para movimento e teletransporte, sugestões para itens como limites de movimento de avatar e design de colisão e uma secção detalhada sobre Camadas.
Orientações sobre o movimento do avatar
Uma cena deve ter Colliders para o avatar andar e teletransportar. Em geral, um Colisor de Malha de poli baixo que se ajuste fortemente à geometria visual produzirá os melhores resultados. Os Colisores de Caixa funcionam muito bem em cenários triviais, mas podem resultar em alguns problemas, como fazer com que o avatar fique preso nos cantos ou derrote os limites de altura dos passos.
Limites de movimento do avatar de malha:
Declive máximo walkable: <45 graus
Altura máxima do passo: 0,3
Raio da cápsula avatar: 0,3
Altura da cápsula avatar: 2
Altura do avatar: 1,8
Sugestões para obter os melhores resultados:
Alinhe as superfícies de colisão com as superfícies visuais em que o avatar irá andar. Isto é importante para evitar problemas com a posição do avatar em relação à superfície do elemento visual (para evitar flutuações ou recortes).
Os cantos arredondados ajudam a suavizar o movimento do avatar e a impedir que o avatar fique bloqueado.
Para bloquear o movimento do avatar, utilize declives íngremes ou uma altura muito maior do que a altura máxima do passo.
Modifique a forma dos seus colisores para criar superfícies naturalmente difíceis ou impossíveis de percorrer pelo avatar. Por exemplo, utilize um Colisor de Malha com uma forma irregular que não forneça uma superfície plana ou declive walkable para o avatar ficar em pé.
Em alguns casos, um Colisor de Cápsulas ou uma forma arredondada semelhante em objetos ou áreas em que o avatar não deve andar pode ser suficiente. Estas formas são inveteráveis se o declive for suficientemente íngreme e fará com que o avatar deslize.
Camadas de Colisão
Os objetos interagiveis são GameObjects com um colisor não acionador e geometria visual correspondente numa das camadas em colisão do objeto. Os avatares podem andar e ser posicionados em objetos com colisores não acionadores, por isso tenha em atenção a camada que está a ser utilizada.
Para ter um posicionamento e teletransporte precisos do avatar, os colisores de cenas têm de estar nas camadas adequadas. O avatar do utilizador local irá interagir com (colidir e caminhar) com quaisquer colisões nas camadas que suportem estas interações.
Quando o avatar é posicionado ou teletransportado, é importante que o avatar colide com um objeto "terra" e seja colocado consistentemente na mesma altura acima do solo (isto é denominado "ligação à terra"). Se não for detetado nenhum terreno, o avatar cairá. Isto é aceitável se estiver acima do solo (não há danos em queda!), mas se o avatar for colocado abaixo do objeto "terra", o avatar poderá não conseguir registar uma colisão com esse objeto, fazendo com que este caia do ambiente e volte a coser. Se o avatar penetrar no chão durante o reposicionamento, ficará de castigo.
Todos os avatares numa sessão devem ter uma altura consistente. A posição do avatar é ajustada se a sua altura for alterada fora do intervalo. Por exemplo:
Um utilizador de VR vai e sai fisicamente de uma posição sentada ou em pé. O movimento HMD faz com que o avatar na cena penetre no chão ou fique muito mais alto verticalmente do que outros avatares.
Um script visual mal configurado teletransporta o avatar para uma posição que não cabe ou é verticalmente demasiado baixo.
Outra razão pela qual isto é importante é que quando a física do avatar for atualizada, se o avatar não estiver de castigo, saltará para a posição como resultado da sua cápsula colidir com o chão e puxar o avatar para a nova posição. Isto é especialmente impactante para os utilizadores de HMD porque movimentos não naturais como este podem ser indutores de náuseas.
Camadas com as quais o avatar interage e pode continuar:
0 - Predefinição
2 - Ignorar Raycast
4 - Água (só são permitidos colisores de acionadores, não walkable)
14 - GroundCollision (teleportável)
18 - TriggerVolume (só são permitidos colisores de acionadores, não walkable)
21 - IgnoreObjects
26 - Personalizado26
27 - Personalizado27
28 - Personalizado28
29 - IgnoreRealtimeLight
30 - WallCollision
Saiba mais sobre Camadas num projeto do Mesh.
Suporte de teletransporte
Para que uma cena suporte teletransporte, as superfícies teletransportáveis (por exemplo, o piso ou o solo) têm de ter colisões na camada GroundCollision . Existem outras camadas walkable, mas apenas GroundCollision é teleportável. A geometria visual não é teleportável e não deve estar na camada GroundCollision ; só os Colliders podem estar nessa camada. Camadas inadequadas ou inconsistentes e colisão podem causar efeitos indesejáveis ao teletransportar ou encontrar o terreno.
Uma superfície teleportável tem de cumprir as seguintes condições:
- Tem de ter algum tipo de Colisor não acionador anexado (por exemplo, um Colisor de Malha ou Um Colisor de Caixas).
- A camada tem de ser definida como GroundCollision.
Tenha cuidado com limites baixos ou túneis; estes podem afetar potencialmente a ligação à terra e teletransporte do avatar. Por exemplo, a física do avatar ou o arco de teletransporte podem intersectar ou interagir com o colisor acima deles. A altura do solo para o telhado para uma área percorrível deve ter mais de 2 m de altura da cápsula avatar. Tem de haver uma pequena memória intermédia de espaço acima da cabeça do avatar, especialmente se o telhado estiver inclinado em vez de plano.
A física da locomoção proporciona um movimento suave do avatar com todos os colisores interagiveis dos participantes e impede a penetração de áreas demasiado pequenas para a colisão do avatar. No entanto, uma colisão no solo desonesto ou geometria de ambiente problemática, como formas de cunha ou espaços muito estreitos, pode potencialmente fazer com que o avatar ou a câmara penetrem em objetos ou fiquem presos. É essencial que teste minuciosamente todas as superfícies walkable e teleportáveis.
Camadas em detalhe
Camadas de Objeto
Quando um GameObject tem um colisor não acionador, irá colidir com outros objetos se estiver numa das camadas do objeto.
0 - Predefinição
2 - Ignorar Raycast
4 - Água (só são permitidos colisores de gatilhos)
14 - GroundCollision
18 - TriggerVolume (só são permitidos colisores de acionadores)
20 - ObjectCollision
26 - Personalizado26
27 - Personalizado27
28 - Personalizado28
29 - IgnoreRealtimeLight
30 - WallCollision
31 - IgnoreParticipant
A camada predefinida no Unity é (não surpreendentemente) denominada "Predefinição", pelo que poderá ter de utilizar uma camada diferente se não quiser interagir com outros objetos. Por exemplo, IgnoreParticipant é utilizado para objetos que não devem interagir com o avatar e IgnoreCollisions é utilizado para objetos que não devem interagir com nada.
Algumas camadas importantes
Predefinição
Se não for especificado de outra forma, um Collider estará na camada Predefinida . Esta é uma camada walkable e o avatar será corretamente fundamentado. Não é um destino de teletransporte válido para o utilizador local. Esta camada interage e colide com outros objetos.
GroundCollision
Apenas os colisores na camada GroundCollision são alvos de teletransporte válidos para o utilizador local. De outra forma, é idêntico à camada Predefinida .
A geometria visual não apoiada por colisão não é walkable e não bloqueia o avatar, por isso é um alvo de teletransporte impróprio e não deve estar na camada GroundCollision .
WallCollision
A camada WallCollision é utilizada para indicar paredes que o avatar não deve penetrar para restringir o avatar num espaço jogável. Os utilizadores de VR podem mover os seus avatares de formas arbitrárias com o movimento HMD durante a locomoção de escala de salas e podem andar fisicamente por uma parede virtual. O avatar será teletransportado de volta aos limites da área de jogo depois de ter percorrido uma distância definida. Esta camada é idêntica à camada Predefinida .
Definições de camada
Segue-se uma lista de camadas definidas pelo ID e pelo nome, incluindo a semântica de bloqueio e a descrição:
Predefinição
[Avatar/Object/Raycast Blocking]
Utilizado para colisão e iluminação. Um avatar pode andar sobre ele, mas não teletransportá-lo. Predefinição para a maioria dos adereços. Os objetos na camada Predefinida recebem Luz Direcional em Tempo Real do ambiente.
TransparentFX
[Não Está a Bloquear]
Processamento especial no pipeline de composição do Unity para objetos de efeitos transparentes e especiais; garante uma ordem de composição correta para transparência.
IgnoreRaycast
[Avatar/Bloqueio de Objetos]
Camada ativada por colisão que não bloqueia raycasts, como objetos não interagiveis ou paredes invisíveis que os avatares não conseguem passar, mas os objetos físicos podem passar (por exemplo, corrimões que os objetos podem ser lançados, mas os avatares não podem saltar).
n/a
Água
[Não Está a Bloquear]
Especificamente para superfícies de água. Pode ser utilizado para interações especializadas de composição e física com a água. Não utilize com colisões não acionadores.
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
GroundCollision
[Avatar/Object/Raycast Blocking]
Utilizado para superfícies de colisão que podem ser teletransportadas. Nota: em versões anteriores do Mesh Toolkit, esta era a camada "NavMesh".
n/a
n/a
IgnoreCollisions
[Não Está a Bloquear]
Não interage com nada. Pode recortar através do ambiente e de outros objetos.
TriggerVolume
[Não Está a Bloquear]
Camada para objetos que não devem ser afetados pela física ou raycasts e não têm qualquer utilização especial de outra forma. Não utilize em objetos com colisões que não sejam acionadores.
n/a
ObjectCollision
[Bloqueio de Objetos]
Camada para colidir com objetos, mas não com o avatar ou raycasts.
IgnorarObjetos
[Avatar/Bloqueio de Raycast]
Camada para colidir com avatar, mas não com objetos.
RaycastOnly
[Bloqueio de Raycast]
Camada para objetos que bloqueiam raycasts ou podem ser selecionados, mas não afetam o avatar ou a colisão de objetos.
n/a
n/a
n/a
Personalizado26
[Avatar/Object/Raycast Blocking]
Camada definida pelo utilizador.
Personalizado27
[Avatar/Object/Raycast Blocking]
Camada definida pelo utilizador.
Personalizado28
[Avatar/Object/Raycast Blocking]
Camada definida pelo utilizador.
IgnoreRealtimeLight
[Avatar/Object/Raycast Blocking]
Especifique que objetos de arte no ambiente não recebem luz direcional em tempo real, como a maioria dos objetos estáticos (utilize iluminação assada com o mapa de luz).
WallCollision
[Avatar/Object/Raycast Blocking]
Colisão que impede o recorte através de uma cena. Se um utilizador de HMD enfiar a cabeça na parede, será reencaminhado para uma localização próxima na área jogável.
IgnorarParticipant
[Object/Raycast Blocking]
Objetos que bloqueiam raycasts e outros objetos, mas não avatares.
Interações de camadas e tabela
Interações de camada
Tabela camadas