Gestor de restrições — MRTK2
O gestor de restrições permite aplicar um conjunto de componentes de restrição a uma transformação. Os componentes do tipo TransformConstraint
anexados ao objeto de jogo podem ser tidos em consideração.
Por predefinição, o gestor de restrições irá recolher automaticamente todos os componentes de restrição ligados ao objeto de jogo e aplicá-los a transformações processadas.
No entanto, os utilizadores podem optar por configurar manualmente a lista de restrições aplicadas e permitir a aplicação de apenas um subconjunto de restrições anexadas.
Atualmente, os seguintes elementos do MRTK UX suportam o gestor de restrições:
Propriedades e campos do inspetor
O gestor de restrições pode ser operado em dois modos:
- Seleção de restrição automática
- Seleção de restrição manual
Seleção de restrição automática
O modo predefinido do gestor de restrições, a seleção de restrição automática, irá fornecer uma lista de todos os componentes de restrição anexados, bem como aceder a botões e um botão adicionar restrição.
Adicionar restrição ao objeto de jogo
Este botão permite que um componente de restrição seja adicionado diretamente ao inspetor do gestor de restrições. Todos os tipos de restrição num projeto devem estar visíveis aqui. Veja Restrições de transformação para obter mais informações.
Ir para o componente
Todas as restrições encontradas no objeto serão listadas aqui com um botão Ir para componente . Este botão fará com que o inspetor desloque-se para o componente de restrição selecionado para que possa ser configurado.
Seleção de restrição manual
Se o gestor de restrições estiver definido como modo manual, apenas as restrições que estão ligadas na lista de restrições são processadas e aplicadas à transformação. A lista apresentada só irá mostrar as restrições selecionadas pelo utilizador, bem como aceder a botões ou opções para remover ou adicionar entradas. Ao ativar o modo manual pela primeira vez, o gestor de restrições preencherá a lista todos os componentes disponíveis como ponto de partida para selecionar componentes de restrição anexados.
Remover entrada
Esta ação remove a entrada da lista selecionada manualmente. Tenha em atenção que esta opção não removerá o componente de restrição do objeto de jogo. Os componentes de restrição têm sempre de ser removidos manualmente para garantir que não quebram acidentalmente qualquer outro componente que se refuja a este componente.
Adicionar entrada
Adicionar entrada abrirá uma lista pendente com todos os componentes de restrição disponíveis que ainda não se encontram na lista manual. Ao clicar em qualquer uma das entradas, esse componente será adicionado à seleção de restrição manual.
Adicionar nova restrição
Esta opção irá adicionar um componente do tipo selecionado ao objeto de jogo e adicionar o componente de restrição recentemente criado à lista de restrições manual.
Transformar restrições
As restrições podem ser utilizadas para limitar a manipulação de alguma forma. Por exemplo, algumas aplicações podem necessitar de rotação, mas também exigem 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 uma série de 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 TransformConstraint
e implemente a propriedade abstrata ConstraintType
e o método abstrato ApplyConstraint
. Ao adicionar uma nova restrição ao objeto, deve restringir a manipulação da forma que foi definida. Esta nova restrição também deve ser apresentada na seleção automática do gestor de restrições ou adicionar o menu pendente de entrada no modo manual.
Todas as restrições fornecidas pelo MRTK partilham as seguintes propriedades:
Tipo de Mão
Especifica se a restrição é utilizada para 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.
- 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 de duas mãos, se selecionada.
Tipo de Proximidade
Especifica se a restrição é utilizada para tipos próximos, distantes ou ambos os tipos de manipulação. Uma vez que esta propriedade é um sinalizador, ambas as opções podem ser selecionadas.
- Próximo: 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
Quando esta restrição é anexada a um objeto, a rotação será limitada para que o objeto fique sempre virado para o utilizador. Isto é útil para ardósias ou painéis. As propriedades para FaceUserConstraint
são as seguintes:
Face ausente
Os rostos do objeto estão afastados do utilizador, se forem verdadeiros.
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. As propriedades para FixedDistanceConstraint
são as seguintes:
Transformação de restrição
Esta é a outra transformação à qual o objeto manipulado terá uma distância fixa. Predefinições para a transformação da câmara.
FixedRotationToUserConstraint
Esta restrição corrige a rotação relativa entre o utilizador e o objeto manipulado enquanto está a ser manipulado. Isto é útil para ardósias ou painéis, uma vez que garante que o objeto manipulado mostra sempre o mesmo rosto ao utilizador do que no início da manipulação. O FixedRotationToUserConstraint
não tem quaisquer propriedades exclusivas.
FixedRotationToWorldConstraint
Esta restrição corrige a rotação global do objeto manipulado enquanto está a ser manipulado. Isto pode ser útil nos casos em que nenhuma rotação deve ser transmitida pela manipulação. O FixedRotationToWorldConstraint
não tem quaisquer propriedades exclusivas:
ManterApparentSizeConstraint
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. O MaintainApparentSizeConstraint
não tem quaisquer propriedades exclusivas:
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. As propriedades para MoveAxisConstraint
são as seguintes:
Restrição ao movimento
Especifica os eixos que impedem o movimento. Por predefinição, estes eixos serão globais e não locais, mas podem ser alterados abaixo. Uma vez que esta propriedade é um sinalizador, podem ser selecionadas várias opções.
- Eixo X: o movimento ao longo do eixo x é restringido se selecionado.
- Eixo Y: se selecionado, o movimento ao longo do eixo y é restringido.
- Eixo Z: o movimento ao longo do eixo z é restringido se selecionado.
Utilizar espaço local para restrição
Irá restringir relativamente os eixos de transformação local do objeto manipulado, se forem verdadeiros. Falso por predefinição.
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 de eixo y, por exemplo. As propriedades para RotationAxisConstraint
são as seguintes:
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 podem ser alterados abaixo. Uma vez que esta propriedade é um sinalizador, podem ser selecionadas várias opções.
- Eixo Y: a rotação sobre o eixo y é restrita se selecionada.
- Eixo Z: a rotação sobre o eixo z é restrita se selecionada.
- Eixo X: a rotação sobre o eixo x é restrita se selecionada.
Utilizar espaço local para restrição
Irá restringir relativamente os eixos de transformação local do objeto manipulado, se forem verdadeiros. Falso por predefinição.
MinMaxScaleConstraint
Esta restrição permite definir valores mínimos e máximos para a escala do objeto manipulado. Isto é útil para impedir que os utilizadores dimensionem um objeto demasiado pequeno ou demasiado grande. As propriedades para MinMaxScaleConstraint
são as seguintes:
Mínimo de dimensionamento
O valor de escala mínimo durante a manipulação.
Dimensionar máximo
O valor de escala máximo durante a manipulação.
Relativamente ao estado inicial
Se for verdadeiro, os valores acima serão interpretados em relação à escala inicial dos objetos. Caso contrário, serão interpretados como valores de dimensionamento absolutos.