BoundsControl — MRTK3

Bounds control

BoundsControl fornece uma caixa delimitadora de tamanho automático, juntamente com recursos de manipulação para rotação e escala.

No MRTK 2.x, BoundsControl foi gerado principalmente por runtime por meio do uso de ScriptableObjects de configuração. No MRTK3, a instalação e a personalização do BoundsControl foram significativamente simplificadas. Os visuais e identificadores de limites são simplesmente um pré-fabricado personalizável que BoundsControl instancia em runtime. Os desenvolvedores podem ajustar e personalizar o pré-fabricado visual ou até mesmo criar novos visuais de limites do zero. Fornecemos implementações de visuais de limites padrão, seguindo o novo Realidade Misturada Linguagem de Design.

Os novos visuais oferecem comentários visuais simplificados que ilustram a intenção do usuário e a manipulação do objeto com ruído visual minimamente intrusivo.

Instalação

Basta adicionar BoundsControl a um objeto existente e preencher a BoundsVisualsPrefab referência com os visuais de limites que você gostaria de usar. Fornecemos alguns visuais de limites pré-criados diferentes para você usar.

Importante

É altamente recomendável que os desenvolvedores adicionem MinMaxScaleConstraint para impedir que o usuário dimensione o objeto para um tamanho inutilmente pequeno ou grande.

Para usar a intenção e os efeitos de foco dos visuais de limites, você deve ter um StatefulInteractable sobre o objeto. Se o interacionável não for detectado automaticamente, você poderá especificar a conexão no inspetor BoundsControl.

Observação

Recomendamos que os desenvolvedores usem ObjectManipulator ao lado de BoundsControl para oferecer aos usuários manipulação direta, além da manipulação baseada em acessibilidade. ObjectManipulator pode servir como os StatefulInteractable estados de foco/foco aos quais os visuais associados respondem.

Pré-fabricados de elementos visuais de limites

Oferecemos vários visuais de limites pré-criados para uso com BoundsControl. Os desenvolvedores são incentivados a criar variantes pré-fabricados desses visuais e personalizá-los para atender às suas necessidades. As animações de identificador e os estados são alimentados pelo StateVisualizer, permitindo que os desenvolvedores personalizem ainda mais a aparência das funcionalidades.

Manipular estilo de oclusão

Esses visuais associados oferecem um design visual simplificado com menos distrações para o usuário. Somente as alças relevantes ao longo das bordas dos limites ficarão visíveis. Os elementos visuais associados contraem, expandem e alteram a cor/espessura, dependendo da intenção do usuário e do progresso da seleção. É altamente recomendável usar esse estilo visual de limites.

Occluded handles

Somente intenção

Em alguns contextos, os identificadores podem ser indesejáveis, e os desenvolvedores podem querer usar os visuais de limites sozinhos como um indicador delicioso da intenção do usuário. Embora esse pré-fabricado faça o trabalho, o mesmo efeito pode ser obtido com qualquer um dos outros visuais de limites selecionando HandleType.None. Descobrimos que os visuais de limites squeezable são um elemento de feedback visual satisfatório e delicioso para muitos contextos diferentes, não apenas para manipulação baseada em identificador.

No handles

Estilo herdado

Esses visuais de limites mostram todos os identificadores e bordas da caixa. Isso corresponde mais de perto à linguagem de design herdada e ao comportamento anterior visto no MRTK 2.x; no entanto, esse design pode ser mais perturbador para os usuários devido a ruídos visuais desnecessários. Além disso, a presença das alças que estão na frente do objeto (e atrás) pode causar problemas com a manipulação de pinçamento de olhar indireto. Não recomendamos usar esse estilo para novos aplicativos, especialmente aqueles que aproveitam o direcionamento de foco.

Traditional handles

Design de interação

Na iteração atual, oferecemos uma interação simples de ativação/desativação. Clicando nos limites no local (em outras palavras, selecionando o objeto, não movendo-o e liberando-o) as alças podem ser ativadas e desativadas. A tolerância à distância para essa verificação pode ser ajustada com DragToggleThreshold, e esse comportamento de ativação em si pode ser habilitado/desabilitado com a ToggleHandlesOnClick propriedade.

Bounds control toggle

Os identificadores podem ser ativados manualmente ou desativados do código a qualquer momento definindo HandlesActive.

Cálculo de limites automáticos

BoundsControl tentará calcular os limites do objeto associado automaticamente. Se uma forma de limites específica for desejada, verifique a opção OverrideBounds e especifique o objeto bounds diretamente. O sistema de cálculo de limites calculará apenas os limites do objeto de substituição especificado.

Isso BoundsCalculationMethod influencia a forma como o algoritmo calcula limites. Se a forma visual do objeto fechado não corresponder necessariamente ao colisor ou o oposto for verdadeiro, os desenvolvedores poderão ajustar o método de cálculo para preferir usar limites de renderizador ou colisor ou uma combinação de ambos.

Independentemente do método de cálculo, a opção Padding incluirá os limites uniformemente em unidades mundiais. Quando os limites são nivelados, o eixo achatado não é acolchoado.

Nivelamento

Flattened BoundsControl

BoundsControl também pode ser usado para manipular conteúdo 2D. Se FlattenMode estiver definido como Auto, o BoundsControl se nivelará a um limite retangular 2D se o objeto for suficientemente plano ao longo de qualquer eixo. Se o objeto não for bastante simples o suficiente, mas você ainda quiser acessibilidades de limites retangulares, FlattenMode.Always sempre achatará o BoundsControl ao longo do eixo mais skinniest. Por outro lado, FlattenMode.Never impedirá que o BoundsControl seja nivelado, mesmo quando o objeto estiver muito fino.

Opções de manipulação

O comportamento de manipulação de BoundsControl pode ser ajustado de várias maneiras. A RotateAnchor opção controla o ponto dinâmico em torno do qual o BoundsControl é girado ao usar as acessibilidades de rotação. Os pontos dinâmicos de alguns objetos estão longe de seu 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 sempre gire ao redor do centro geométrico dos limites computados em vez da origem real do objeto.

O comportamento de dimensionamento pode ser definido como ou UniformNon Uniform. No modo Uniform, todos os eixos do objeto são dimensionados juntos, mantendo a proporção e a aparência. O dimensionamento não uniforme permite que cada eixo do objeto seja dimensionado independentemente.