Controlo de limites

Controlo de limites

BoundsControl é o novo componente para o comportamento de manipulação, anteriormente encontrado na BoundingBox. O controlo de limites faz uma série de melhorias e simplificações na configuração e adiciona novas funcionalidades. Este componente é um substituto para a caixa de delimitação, que será depreciada.

O BoundsControl.cs script fornece funcionalidade básica para transformar objetos em realidade mista. Um controlo de limites mostrará uma caixa à volta do holograma para indicar que pode ser interagida. As pegas nos cantos e bordas da caixa permitem a escala, rotação ou tradução do objeto. O controlo de limites também reage à entrada do utilizador. No HoloLens 2, por exemplo, o controlo dos limites responde à proximidade do dedo, fornecendo feedback visual para ajudar a perceber a distância do objeto. Todas as interações e visuais podem ser facilmente personalizados.

Cena de exemplo

Pode encontrar exemplos de configurações de controlo de limites na BoundsControlExamples cena.

Limites controlam exemplo

Propriedades inspetoras

Objeto de destino

Esta propriedade especifica qual objeto será transformado pela manipulação de controlo de limites. Se nenhum objeto estiver definido, fica em incumprimento do objeto do proprietário.

Comportamento de ativação

Existem várias opções para ativar a interface de controlo de limites.

  • Ativar no arranque: O controlo dos limites torna-se visível assim que a cena é iniciada.
  • Ativar por proximidade: O controlo dos limites torna-se visível quando uma mão articulada está perto do objeto.
  • Ativar por ponteiro: O controlo dos limites torna-se visível quando é alvo de um ponteiro de raios manuais.
  • Ativar por proximidade e ponteiro:O controlo dos limites torna-se visível quando é alvo de um ponteiro de raios manuais ou uma mão articulada está perto do objeto.
  • Ativar manualmente:O controlo dos limites não fica visível automaticamente. Pode ativá-lo manualmente através de um script acedendo à propriedade boundsControl.Ative.

Sobreposição de limites

Define um colisor de caixa do objeto para a computação de limites.

Preenchimento de caixa

Adiciona um acolchoado aos limites do colisor utilizados para calcular as extensões do controlo. Isto influenciará não só a interação, mas também o impacto nos visuais.

Eixo achatado

Indica se o controlo é achatado num dos eixos, tornando-o 2dimensional e desafetando a manipulação ao longo desse eixo. Esta função pode ser usada para objetos finos como ardósias. Se o eixo de achatado estiver definido para Aplainar Auto, o guião escolherá automaticamente o eixo com a menor extensão como eixo achatado.

Suavização

A secção de alisamento permite configurar o comportamento de suavização para a escala e rodar o controlo.

Visuais

O aparecimento do controlo de limites pode ser configurado modificando uma das configurações visuais correspondentes. As configurações visuais são objetos scriptáveis ligados ou não estão descritos com mais detalhe na secção de objetos de configuração.

Objetos de configuração

O controlo vem com um conjunto de objetos de configuração que podem ser armazenados como objetos scriptáveis e partilhados entre diferentes instâncias ou pré-fabricados. As configurações podem ser partilhadas e ligadas quer como ficheiros de ativos scriptáveis individuais, quer como ativos scriptáveis aninhados dentro dos pré-fabricados. Outras configurações também podem ser definidas diretamente no caso sem ligar a um ativo scriptable externo ou aninhado.

O inspetor de controlo de limites indicará se uma configuração é partilhada ou inlinizada como parte da instância atual, mostrando uma mensagem no inspetor de propriedade. Além disso, as instâncias partilhadas não serão editáveis diretamente na própria janela de controlo de limites, mas em vez disso, o ativo a que está a ligar tem de ser diretamente modfiado para evitar alterações acidentais nas configurações partilhadas.

Atualmente, o controlo de limites oferece opções de objetos de configuração para as seguintes funcionalidades:

Configuração da caixa

A configuração da caixa é responsável por renderizar uma caixa sólida com limites definidos através do tamanho do colisor e do acolchoamento da caixa. Podem ser criadas as seguintes propriedades:

  • Material decaixa : define o material aplicado à caixa renderizada quando não ocorre qualquer interação. Uma caixa só será entregue se este material estiver definido.
  • Caixa de material agarrado:material para a caixa quando o utilizador interage com o controlo agarrando através de interação próxima ou distante.
  • Escala de visualização do eixo achatado:uma balança que é aplicada ao visor da caixa se um dos eixos for achatado.

Configuração de alças de escala

Esta gaveta de propriedade permite modificar o comportamento e visualização de pegas de escala do controlo de limites.

  • Material de manípulo: material aplicado às pegas.
  • Material agarrado à pega:material aplicado no cabo agarrado.
  • Cabo pré-fabricado: pré-fabricado opcional para a pega da balança. Se não estiver definido, o MRTK utilizará um cubo como padrão.
  • Tamanho da pega: tamanho da pega da balança.
  • Enchimento do colisor: enchimento para adicionar ao colisor da pega.
  • Desenhe a corda quando manipular:quando ativo, desenhe uma linha de amarração do ponto de partida da interação para a posição atual da mão ou do ponteiro.
  • As pegas ignoram o colisor:se um colisor ficar ligado aqui, as pegas ignorarão qualquer colisão com este colisor.
  • Porta pré-fabricado de ardósia:pré-fabricado a utilizar para a pega quando o comando estiver achatado.
  • Manuseias de escala:controla a visibilidade da pega.
  • Comportamento da balança: pode ser definido para uma escala uniforme ou não uniforme.

Configuração de pegas de rotação

Esta configuração define o comportamento do cabo de rotação.

  • Material de manípulo: material aplicado às pegas.
  • Material agarrado à pega:material aplicado no cabo agarrado.
  • Cabo pré-fabricado:pré-fabricado opcional para a pega. Se não for definido, o MRTK utilizará uma esfera como padrão.
  • Tamanho da pega: tamanho da pega.
  • Enchimento do colisor: enchimento para adicionar ao colisor da pega.
  • Desenhe a corda quando manipular:quando ativo, desenhe uma linha de amarração do ponto de partida da interação para a posição atual da mão ou do ponteiro.
  • As pegas ignoram o colisor:se um colisor ficar ligado aqui, as pegas ignorarão qualquer colisão com este colisor.
  • Tipo de colisor pré-fabricado:tipo de colisor a ser utilizado com a pega criada.
  • Manípulo para X: controla a visibilidade da pega para o eixo X.
  • Manuseie para Y: controla a visibilidade da pega para o eixo Y.
  • Manípulo para Z: controla a visibilidade da pega para o eixo Z.

Configuração de alças de tradução

Permite ativar e configurar as pegas de tradução para o controlo dos limites. Note que as pegas de tradução são desativadas por predefinição.

  • Material de manípulo: material aplicado às pegas.
  • Material agarrado à pega:material aplicado no cabo agarrado.
  • Cabo pré-fabricado:pré-fabricado opcional para a pega. Se não for definido, o MRTK utilizará uma esfera como padrão.
  • Tamanho da pega: tamanho da pega.
  • Enchimento do colisor: enchimento para adicionar ao colisor da pega.
  • Desenhe a corda quando manipular:quando ativo, desenhe uma linha de amarração do ponto de partida da interação para a posição atual da mão ou do ponteiro.
  • As pegas ignoram o colisor:se um colisor ficar ligado aqui, as pegas ignorarão qualquer colisão com este colisor.
  • Tipo de colisor pré-fabricado:tipo de colisor a ser utilizado com a pega criada.
  • Manípulo para X: controla a visibilidade da pega para o eixo X.
  • Manuseie para Y: controla a visibilidade da pega para o eixo Y.
  • Manípulo para Z: controla a visibilidade da pega para o eixo Z.

A configuração de ligações permite a função de cabo do controlo dos limites. As seguintes propriedades podem ser configuradas:

  • Material da estrutura dearame: o material aplicado à malha da estrutura de arame.
  • Raio da borda da estrutura doarame: a espessura da estrutura do fio.
  • Forma de armaçãode arame : a forma da estrutura do fio pode por cúbico ou cilíndrico.
  • Mostrar a estrutura do fio:controla a visibilidade da estrutura do fio.

Configuração do efeito de proximidade

Mostrar e esconder as pegas com animação com base na distância às mãos. Tem animação de escalonamento de dois passos. Os padrão são definidos para HoloLens comportamento de estilo 2.

Limites controlam proximidade
  • Efeito de proximidade Ativo: Permitir ativação de pega baseada na proximidade
  • Objeto De proximidade média: Distância para a escala do 1º passo
  • Proximidade do Objeto: Distância para o escalonamento do 2º passo
  • Escala curta: Valor de escala padrão do ativo do manípulo quando as mãos estão fora do alcance da interação de controlo dos limites (distância definida acima por 'Punho De Proximidade Média'. Utilize 0 para ocultar o punho por defeito)
  • Escala média: Valor de escala do ativo do manípulo quando as mãos estão dentro do intervalo da interação de controlo dos limites (distância definida acima por 'Punho Proximidade De Proximidade'. Utilize 1 para mostrar o tamanho normal)
  • Escala de fecho: Valor de escala do ativo do manípulo quando as mãos estão ao alcance da interação grab (distância definida acima por 'Cabo Proximidade De Proximidade'. Use 1.x para mostrar tamanho maior)
  • Taxa de Crescimento Distante: Avalie uma balança de objetos escalonado de proximidade quando a mão se move de média para proximidade.
  • Taxa média de crescimento: Avalie uma escala de objeto escalonada de proximidade quando a mão se move de média para proximidade.
  • Taxa de crescimento de fecho: Avalie uma balança de objetos escalonada de proximidade quando a mão se move de perto para centro de objetos.

Sistema de Restrição

Os suportes de controlo de limites utilizando o gestor de restrições para limitar ou modificar o comportamento de tradução, rotação ou dimensionamento enquanto utilizam as pegas de controlo de limites.

O inspetor de propriedade mostrará todos os gestores de restrições disponíveis ligados ao mesmo objeto de jogo em uma queda com a opção de rolar e destacar o gestor de restrições selecionado.

Restrições de controlo de limites

Eventos

O controlo de limites fornece os seguintes eventos. Este exemplo utiliza estes eventos para reproduzir feedback áudio.

  • Rotação Iniciada: Disparado quando a rotação começar.
  • Rotação Parada:Disparado quando a rotação parar.
  • Escala Iniciada: Incêndios quando a escala começa.
  • Escala parada: Incêndios quando a escala para.
  • Traduzir Iniciado:Incêndios quando a tradução começa.
  • Traduzir Parado:Incêndios quando a tradução parar.
Limites controlam Eventos

Elásticos (Experimental)

Os elásticos podem ser utilizados quando manipulam objetos através do controlo dos limites. Note que o sistema de elásticos ainda está em estado experimental. Para permitir elásticos, ligue um componente de gestor de elásticos existente ou crie e ligue um novo gestor de elásticos através do Add Elastics Manager botão.

Limites controlam Elásticos

Estilos de manusear

Por padrão, quando atribuir o BoundsControl.cs script, ele mostrará o cabo do estilo HoloLens 1ª geração. Para utilizar HoloLens 2 alças de estilo, é necessário atribuir pré-fabricados e materiais adequados.

Estilos de maneio de controlo de limites 2

Abaixo estão os pré-fabricados, os materiais e os valores de escala para as pegas de controlo de limites de HoloLens 2. Pode encontrar este exemplo na cena do BoundsControlExamples crime.

Limites controlam HandleStyles

Pegas (Configuração para HoloLens estilo 2)

  • Material de maneio: BoundingBoxHandleWhite.mat
  • Material de pega do cabo: BoundingBoxHandleBlueGrabbed.mat
  • Prefab do cabo de escala: MRTK_BoundingBox_ScaleHandle.prefab
  • Scale Handle Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Tamanho da pega da balança: 0.016 (1.6cm)
  • Estofamento do colisor da pega da balança: 0.016 (torna o colisor grabbable ligeiramente maior do que o cabo visual)
  • Cabo de rotação Pré-fabricado: MRTK_BoundingBox_RotateHandle.prefab
  • Tamanho do cabo de rotação: 0.016
  • Acolchoamento do colisor de cabo de rotação: 0.016 (torna o colisor grabbable ligeiramente maior do que o cabo visual)

Transformação muda com manipulador de objetos

Um controlo de limites pode ser utilizado em combinação com ObjectManipulator.cs para permitir certos tipos de manipulação (por exemplo. mover o objeto) sem utilizar as pegas. O manipulador de manipulação suporta interações de uma e de duas mãos. O rastreio manual pode ser usado para interagir de perto com um objeto.

Limites controlam manipulador de objetos

Para que os limites controlem as bordas se comportem da mesma forma ao movê-lo usando ObjectManipulator a interação distante, é aconselhável ligar os seus eventos para ObjectManipulatorOn Manipulation / / a BoundsControl.HighlightWires / BoundsControl.UnhighlightWires respectivamente, como mostrado na imagem acima.

Como adicionar e configurar um controlo de limites usando o Inspetor de Unidade

  1. Adicione o Colisor de Caixas a um objeto
  2. Atribuir BoundsControl script a um objeto
  3. Opções de configuração, tais como métodos de "ativação" (ver secção de propriedades do inspetor abaixo)
  4. (Opcional) Atribua pré-fabricados e materiais para um controlo de limites de estilo HoloLens 2 (ver secção de estilos handle abaixo)

Nota

Utilize o campo de substituição de objectos-alvo e limites no inspetor para atribuir objetos específicos e colidir no objeto com vários componentes infantis.

Controlo de Limites

Como adicionar e configurar um controlo de limites no código

  1. Cubo instantâneo GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Atribua BoundsControl o script a um objeto com collider, utilizando AddComponent <> ()

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Configure as opções diretamente no controlo ou através de uma das configurações scriptáveis (ver propriedades do Inspetor e secção configurações abaixo)

    // Change activation method
    boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer;
    // Make the scale handles large
    boundsControl.ScaleHandlesConfig.HandleSize = 0.1f;
    // Hide rotation handles for x axis
    boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
    
  4. (Opcional) Atribua pré-fabricados e materiais para um controlo de limites de HoloLens de 2 estilos. Isto ainda requer atribuições através do inspetor, uma vez que os materiais e os pré-fabricados devem ser carregados dinamicamente.

Nota

A utilização da pasta 'Recursos' ou Shader.Find para carregar sombreadores dinamicamente não é recomendada, uma vez que podem faltar permutações de shader no tempo de execução.

BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;

Exemplo: Definir escala de controlo de limites mínimos e limites usando MinMaxScaleConstraint

Para definir a escala mínima e máxima, fixe um MinMaxScaleConstraint ao seu controlo. À medida que o controlo de limites liga e ativa o gestor de restrições, o MinMaxScaleConstraint será automaticamente aplicado às alterações de transformação uma vez ligado e configurado.

Também pode utilizar o MinMaxScaleConstraint para definir a escala mínima e máxima para ObjectManipulator .

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Exemplo: Adicionar limites ao controlo em torno de um objeto de jogo

Para adicionar um controlo de limites em torno de um objeto, basta adicionar BoundsControl um componente ao mesmo:

private void PutABoundsControlAroundIt(GameObject target)
{
   target.AddComponent<BoundsControl>();
}

Migrando da Caixa Delimitadora

Os pré-fabricados e instâncias existentes que utilizam a caixa de delimitação podem ser atualizados para o controlo dos novos limites através da janela de migração que faz parte do pacote de ferramentas MRTK.

Para atualizar instâncias individuais de caixa de limites há também uma opção de migração dentro do inspetor de propriedade do componente.

Limites controlam migrar

Ver também