Partilhar via


Restrições — MRTK3

ConstraintManager permite-lhe aplicar um conjunto de componentes de restrição a uma transformação. Por predefinição, o gestor de restrições recolhe automaticamente todos os componentes de restrição anexados e aplica-os ao objeto de destino. No entanto, os utilizadores também podem optar por configurar manualmente a lista de restrições aplicadas e permitir apenas a utilização de um subconjunto de restrições anexadas.

Nota

O MRTK3 oferece atualmente um subconjunto limitado das restrições do MRTK 2.x. Estamos atualmente a investigar uma refatorização do sistema constraints para unificar o fluxo de trabalho do programador com Solvers e Elastics. Fique atento!

Atualmente, os seguintes elementos da EXPERIÊNCIA MRTK suportam restrições:

O gestor de restrições pode operar em dois modos:

  • Seleção de restrição automática
  • Seleção de restrição manual

Seleção de restrição

Seleção de restrição automática

Modo de Seleção Automática

O modo Automático predefinido listará todos os componentes de restrição anexados. Pode aceder diretamente ao componente no inspetor com os botões Ir para o componente ou adicionar uma nova restrição a partir da lista pendente.

Seleção de restrição manual

Modo de Seleção Manual

Se o gestor de restrições estiver definido como modo manual, apenas as restrições ligadas na lista de restrições são processadas e aplicadas à transformação. Ao ativar o modo manual pela primeira vez, o gestor irá preencher automaticamente a lista com todas as restrições atualmente anexadas.

Nota

A ação Remover Entrada só removerá a restrição da lista de seleção manual. O componente continuará presente no GameObject.

Ordem de execução

A ordem de execução de cada restrição pode ser definida na opção Ordem de Execução na própria restrição. A encomenda será refletida na lista apresentada no gestor de restrições. Algumas restrições terão um comportamento diferente quando forem combinadas em diferentes encomendas, por isso tenha em atenção as prioridades de cada restrição e ajuste a respetiva ordem em conformidade.

Transformar restrições

Pode utilizar restrições para limitar a manipulação de alguma forma. Por exemplo, algumas aplicações podem exigir rotação e que o objeto permaneça na vertical. Neste caso, um RotationAxisConstraint pode ser adicionado ao objeto e utilizado para limitar a rotação para a rotação do eixo y. O MRTK fornece várias restrições, todas descritas abaixo.

Também é possível definir novas restrições e utilizá-las para criar comportamentos de manipulação exclusivos que podem ser necessários para algumas aplicações. Para tal, crie um script que herda e TransformConstraint implemente a propriedade abstrata ConstraintType e o método abstrato ApplyConstraint . A nova restrição deve aparecer na lista pendente e deve ser registada automaticamente no gestor de restrições quando adicionada ao objeto.

Todas as restrições fornecidas pelo MRTK partilham as seguintes propriedades:

Tipo de Mão especifica se a restrição é utilizada para o tipo de manipulação com uma mão, duas mãos ou ambos os tipos de manipulação. Uma vez que esta propriedade é um sinalizador, ambas as opções podem ser selecionadas.

  • Com uma mão: a restrição será utilizada durante a manipulação com uma mão, se selecionada.
  • Duas mãos: a restrição será utilizada durante a manipulação com duas mãos, se selecionada.

ProximityType especifica se a restrição é utilizada para quase, longe ou ambos os tipos de manipulação. Uma vez que esta propriedade é um sinalizador, ambas as opções podem ser selecionadas.

  • Perto: A restrição será utilizada durante a manipulação próxima, se selecionada.
  • Longe: A restrição será utilizada durante a manipulação de longe, se selecionada.

FaceUserConstraint

Esta restrição limita a rotação de um objeto de forma a que enfrente sempre o utilizador. A opção Face Away controla se o eixo Z positivo ou negativo é utilizado.

Demonstração de FaceUserConstraint

FixedDistanceConstraint

Esta restrição corrige a distância entre o objeto manipulado e outra transformação de objeto no início da manipulação. Isto é útil para comportamentos como a fixação da distância do objeto manipulado para a transformação da cabeça. O campo de transformação Restrição é predefinido para a transformação da câmara e é a outra transformação à qual o objeto manipulado terá uma distância fixa.

Demonstração de FixedDistanceConstraint

MaintainApparentSizeConstraint

Quando esta restrição é anexada a um objeto, independentemente da distância do objeto do utilizador, manterá o mesmo tamanho aparente para o utilizador (ou seja, ocupará a mesma proporção do campo de vista do utilizador). Isto pode ser utilizado para garantir que uma ardósia ou painel de texto permanece legível enquanto manipula.

Demonstração de MaintainApparentSizeConstraint

MoveAxisConstraint

Esta restrição pode ser utilizada para corrigir os eixos que podem ser movidos por um objeto manipulado. Isto pode ser útil para manipular objetos sobre a superfície de um plano ou ao longo de uma linha.
O campo Restrição no movimento especifica os eixos para impedir o movimento. Por predefinição, estes eixos serão globais e não locais, mas isto pode ser alterado abaixo. Uma vez que esta propriedade é um sinalizador, pode ser selecionado qualquer número de opções.

Demonstração de MoveAxisConstraint

MinMaxScaleConstraint

Esta restrição limita a escala de um objeto, útil para impedir que os utilizadores dimensionem objetos para tamanhos inutilmente pequenos ou grandes. Funciona tanto para o dimensionamento baseado em alças (com BoundsControl) como para o dimensionamento direto com duas mãos (com ObjectManipulator). A opção Relativo ao estado inicial define se os valores de escalaMínimo e Máximo específicos são valores absolutos ou se são multiplicados na escala inicial do objeto.

Demonstração de MinMaxScaleConstraint

RotationAxisConstraint

Esta restrição pode ser utilizada para corrigir os eixos que um objeto manipulado pode ser rodado. Isto pode ser útil para manter um objeto manipulado na vertical, mas continuar a permitir rotações do eixo y, por exemplo.
O campo Restrição na rotação especifica os eixos para impedir a rotação. Por predefinição, estes eixos serão globais e não locais, mas isto pode ser alterado abaixo. Uma vez que esta propriedade é um sinalizador, pode ser selecionado qualquer número de opções.

Demonstração de RotationAxisConstraint