Restrições – MRTK3

ConstraintManager permite que você aplique um conjunto de componentes de restrição a uma transformação. Por padrão, o gerenciador de restrições coletará automaticamente todos os componentes de restrição anexados e os aplicará ao objeto de destino. No entanto, os usuários também podem optar por configurar a lista de restrições aplicadas manualmente, para permitir que apenas um subconjunto de restrições anexadas seja usado.

Observação

Atualmente, o MRTK3 oferece um subconjunto limitado de restrições do MRTK 2.x. No momento, estamos investigando um refatorador do sistema de restrições para unificar o fluxo de trabalho do desenvolvedor com os Solucionadores e os Elásticos. Fique ligado!

Atualmente, os seguintes elementos de UX do MRTK dão suporte a restrições:

O gerenciador 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 padrão listará todos os componentes de restrição anexados. Você pode ir direto para o componente no inspetor usando os botões Acessar o componente ou adicionar uma nova restrição da lista suspensa.

Seleção de restrição manual

Modo de seleção manual

Se o gerenciador de restrições estiver definido como modo manual, somente as restrições vinculadas na lista de restrições serão processadas e aplicadas à transformação. Ao habilitar o modo manual pela primeira vez, o gerente preencherá automaticamente a lista com todas as restrições anexadas no momento.

Observação

A ação Remover Entrada removerá apenas a restrição da lista de seleção manual. O componente ainda estará 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 ordem será refletida na lista exibida no gerenciador de restrições. Algumas restrições se comportarão de modo diferente quando forem combinadas em ordens diferentes, portanto, considere as prioridades de cada restrição e ajuste a ordem corretamente.

Restrições de transformação

As restrições podem ser usadas para limitar a manipulação de alguma forma. Por exemplo, alguns aplicativos podem exigir rotação e que o objeto permaneça ereto. Nesse caso, um RotationAxisConstraint pode ser adicionado ao objeto e usado para limitar a rotação à rotação do eixo y. O MRTK fornece várias restrições. Todas estão descritas abaixo.

Também é possível definir novas restrições e usá-las para criar um comportamento de manipulação exclusivo que pode ser necessário em alguns aplicativos. Para fazer isso, crie um script que herde de TransformConstraint e implemente a propriedade abstrata ConstraintType e o método abstrato ApplyConstraint. A nova restrição deve aparecer na lista suspensa e ser registrada no gerenciador de restrições automaticamente ao ser adicionada ao objeto.

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

Tipo de Mão especifica se a restrição é usada para uma mão, duas mãos ou ambos os tipos de manipulação. Como essa propriedade é um sinalizador, ambas as opções podem ser selecionadas.

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

ProximityType especifica se a restrição é usada para manipulação próxima, distante ou ambos os tipos. Como essa propriedade é um sinalizador, ambas as opções podem ser selecionadas.

  • Próxima: a restrição será usada durante a manipulação próxima, se selecionada.
  • Distante: a restrição será usada durante a manipulação distante, se selecionada.

FaceUserConstraint

Essa restrição limita a rotação de um objeto de modo que ele sempre fique voltado para o usuário. A opção Face Contrária controla se o eixo Z positivo ou negativo é usado.

Demonstração de FaceUserConstraint

FixedDistanceConstraint

Essa restrição corrige a distância entre o objeto manipulado e outra transformação de objeto no início da manipulação. Isso é útil para comportamentos como corrigir a distância do objeto manipulado até a transformação de cabeçalho. O campo transformação Restrição usa como padrão a transformação da câmera e é a outra transformação para a qual o objeto manipulado terá uma distância fixa.

Demonstração de FixedDistanceConstraint

MaintainApparentSizeConstraint

Quando essa restrição estiver anexada a um objeto , independentemente de quão longe o objeto esteja do usuário, ele manterá o mesmo tamanho aparente para o usuário (ou seja, ele assumirá a mesma proporção do campo de exibição do usuário). Isso pode ser usado para garantir que um painel de ardósia ou texto permaneça legível durante a manipulação.

Demonstração de MaintainApparentSizeConstraint

MoveAxisConstraint

Essa restrição pode ser usada para corrigir os eixos que um objeto manipulado pode mover. Isso pode ser útil para manipular objetos sobre a superfície de um plano ou ao longo de uma linha.
O campo Restrição em movimento especifica quais eixos impedir a movimentação. Por padrão, esses eixos serão globais e não locais, mas isso pode ser alterado abaixo. Como essa propriedade é um sinalizador, qualquer número de opções pode ser selecionado.

Demonstração de MoveAxisConstraint

MinMaxScaleConstraint

Essa restrição limita a escala de um objeto, útil para impedir que os usuários dimensionem objetos para tamanhos excessivamente pequenos ou grandes. Ela funciona para escala baseada no identificador (com BoundsControl) e com escala direta de duas mãos (com ObjectManipulator). A opção Relativo ao estado inicial define se os valores de escala Mí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

Essa restrição pode ser usada para corrigir quais eixos um objeto manipulado pode ser girado. Isso pode ser útil para manter um objeto manipulado ereto, mas ainda permitir rotações do eixo y, por exemplo.
O campo Restrição na rotação especifica sobre quais eixos impedir a rotação. Por padrão, esses eixos serão globais e não locais, mas isso pode ser alterado abaixo. Como essa propriedade é um sinalizador, qualquer número de opções pode ser selecionado.

Demonstração de RotationAxisConstraint