BoundsControl – MRTK3
BoundsControl fornece uma caixa delimitadora de tamanho automático, juntamente com as acessibilidades de manipulação para rotação e dimensionamento.
No MRTK 2.x, BoundsControl foi gerado principalmente por runtime através da utilização de scriptableObjects de configuração. No MRTK3, a configuração e personalização do BoundsControl foi significativamente simplificada. Os elementos visuais e identificadores de limites são simplesmente uma prefab personalizável que BoundsControl instancia no runtime. Os programadores podem ajustar e personalizar os elementos visuais pré-fabricados ou até mesmo criar novos elementos visuais vinculados do zero. Fornecemos implementações de elementos visuais de limites padrão, seguindo o novo Idioma de Estrutura Mixed Reality.
Os novos elementos visuais oferecem feedback visual simplificado que ilustra a intenção do utilizador e a manipulação do objeto com um ruído visual minimamente intrusivo.
Configuração
Basta adicionar BoundsControl a um objeto existente e preencher a BoundsVisualsPrefab
referência com os elementos visuais vinculados que pretende utilizar. Fornecemos alguns elementos visuais de limites pré-criados diferentes para que possa utilizar.
Importante
Recomendamos vivamente que os programadores adicionem MinMaxScaleConstraint para impedir que o utilizador dimensione o objeto para um tamanho inutilmente pequeno ou grande.
Para utilizar a intenção dos elementos visuais vinculados e os efeitos de foco, tem de ter um StatefulInteractable
no objeto. Se o interacionável não for detetado automaticamente, pode especificar a ligação no inspetor BoundsControl.
Nota
Recomendamos que os programadores utilizem o ObjectManipulator juntamente com o BoundsControl para oferecer manipulação direta aos utilizadores, além da manipulação baseada na acessibilidade. O ObjectManipulator pode servir como o para os StatefulInteractable
estados de pairar/focar a que os elementos visuais vinculados respondem.
Pré-visualizações de elementos visuais vinculados
Oferecemos vários elementos visuais de limites pré-criados para utilização com BoundsControl. Os programadores são encorajados a fazer variantes pré-fabricadas destes elementos visuais e personalizá-los de acordo com as suas necessidades. As animações e estados do identificador são alimentados pelo StateVisualizer, permitindo aos programadores personalizar ainda mais o aspeto e a funcionalidade das acessibilidades.
Lidar com o estilo de oclusão
Estes elementos visuais vinculados oferecem um design visual simplificado com menos distrações para o utilizador. Apenas as alças relevantes ao longo das margens dos limites estarão visíveis. Os elementos visuais vinculados contraem, expandem e alteram a cor/espessura consoante a intenção do utilizador e o progresso da seleção. Recomendamos vivamente a utilização deste estilo visual vinculado.
Apenas intenção
Em alguns contextos, as alças podem ser indesejáveis e os programadores podem querer utilizar apenas os elementos visuais vinculados como um indicador delicioso da intenção do utilizador. Embora esta prefab faça a tarefa, o mesmo efeito pode ser alcançado com qualquer um dos outros elementos visuais vinculados ao selecionar HandleType.None. Descobrimos que os elementos visuais de limites espremíveis são um elemento de feedback visual satisfatório e delicioso para muitos contextos diferentes, não apenas para manipulação baseada em alças.
Estilo legado
Estes elementos visuais de limites mostram todas as alças e arestas da caixa. Isto corresponde mais de perto à linguagem de design legada e ao comportamento anterior observado no MRTK 2.x; no entanto, esta estrutura pode ser mais distraída para os utilizadores devido a ruídos visuais desnecessários. Além disso, a presença das alças que estão à frente do objeto (e por trás) pode causar problemas com a manipulação indireta de aproximar o olhar. Não recomendamos a utilização deste estilo para novas aplicações, especialmente aquelas que tiram partido da segmentação de olhares.
Design de interação
Na iteração atual, oferecemos uma interação de ativação/desativação simples. Ao clicar nos limites no local (por outras palavras, selecionar o objeto, não movê-lo e soltá-lo), as alças podem ser ativadas e desativadas. A tolerância à distância para esta verificação pode ser ajustada com DragToggleThreshold
e este comportamento de ativação em si pode ser ativado/desativado com a ToggleHandlesOnClick
propriedade.
As alças podem ser ativadas manualmente ou desativadas do código em qualquer altura ao definir HandlesActive
.
Cálculo de limites automáticos
BoundsControl tentará calcular automaticamente os limites do objeto associado. Se for pretendida uma forma de limites específica, verifique a opção OverrideBounds
e especifique o objeto de limites diretamente. O sistema de cálculo bounds só calculará os limites do objeto de substituição especificado.
O BoundsCalculationMethod
influencia a forma como o algoritmo calcula os limites. Se a forma visual do objeto incluído não corresponder necessariamente ao colisor ou o contrário for verdadeiro, os programadores podem ajustar o método de cálculo para preferirem utilizar os limites de composição ou colisão ou uma combinação de ambos.
Independentemente do método de cálculo, a opção Padding
irá encadear os limites uniformemente em unidades mundiais. Quando os limites são achatados, o eixo achatado não é acolchoado.
Aplanar
BoundsControl também pode ser utilizado para manipular conteúdo 2D. Se FlattenMode
estiver definido como Auto
, o BoundsControl irá aplanar-se a um limite retangular 2D se o objeto estiver suficientemente plano ao longo de qualquer eixo. Se o objeto não for suficientemente plano, mas ainda assim gostaria de ter limites retangulares, FlattenMode.Always
irá sempre aplanar o BoundsControl ao longo do eixo mais esfolado. Por outro lado, FlattenMode.Never
impedirá que o BoundsControl aplane, mesmo quando o objeto é muito fino.
Opções de manipulação
O comportamento de manipulação do BoundsControl pode ser ajustado de várias formas. A RotateAnchor
opção controla o ponto dinâmico em torno do qual o BoundsControl é rodado ao utilizar as acessibilidades de rotação. Os pontos dinâmicos de alguns objetos estão longe do centro visual, o que pode causar desconforto e imprecisão ao manipular com as alças de rotação. Especificar BoundsCenter
para o RotateAnchor
fará com que o BoundsControl rode sempre em torno do centro geométrico dos limites calculados em vez da origem real do objeto.
O comportamento de dimensionamento pode ser definido como ou Uniform
Non Uniform
. No modo Uniforme, todos os eixos do objeto são dimensionados em conjunto, mantendo a proporção e o aspeto. O dimensionamento não uniforme permite que cada eixo do objeto seja dimensionado de forma independente.