Caixa de delimitação

Caixa de delimitação

Nota

A caixa de limites é depreciada e substituída pelo seu controlo de limitessucessor . Utilize uma das opções de migração para atualizar os objetos de jogo existentes.

O BoundingBox.cs script fornece funcionalidade básica para transformar objetos em realidade mista. Uma caixa de delimitação mostrará um cubo à volta do holograma para indicar que pode ser interagido. As pegas nos cantos e bordas do cubo permitem escalar ou rodar o objeto. A caixa de delimitação também reage à entrada do utilizador. No HoloLens 2, por exemplo, a caixa de delimitação 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.

Para mais informações, consulte a caixa limite e a barra de aplicações no Windows Dev Center.

Cena de exemplo

Pode encontrar exemplos de configurações de caixa de delimitação na BoundingBoxExamples cena.

Exemplos de caixa de delimitação

Como adicionar e configurar uma caixa de limites usando o Inspetor de Unidade

  1. Adicione o Colisor de Caixas a um objeto
  2. Atribuir BoundingBox 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 uma caixa de delimitação 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.

Caixa de delimitação 1

Como adicionar e configurar uma caixa de limites no código

  1. Cubo instantâneo GameObject

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

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. Opções de configuração (ver secção de propriedades do inspetor abaixo)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (Opcional) Atribua pré-fabricados e materiais para uma caixa de delimitação de estilo HoloLens 2. 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.

bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;

Exemplo: Definir escala de caixa mínima e limite máxima usando MinMaxScaleConstraint

Para definir a escala mínima e máxima, utilize o MinMaxScaleConstraint . Também pode utilizar o MinMaxScaleConstraint para definir a escala mínima e máxima para ManipulationHandler .

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a  duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Exemplo: Adicione caixa de delimitação em torno de um objeto de jogo

Para adicionar uma caixa de delimitação em torno de um objeto, basta BoundingBox adicionar-lhe um componente:

private void PutABoxAroundIt(GameObject target)
{
   target.AddComponent<BoundingBox>();
}

Propriedades inspetoras

Objeto de destino

Esta propriedade especifica qual o objeto que será transformado pela manipulação da caixa de delimitação. Se nenhum objeto estiver definido, a caixa de delimitação predefini-se ao objeto do proprietário.

Sobreposição de limites

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

Comportamento de ativação

Existem várias opções para ativar a interface de caixa de delimitação.

  • Ativar no início: A caixa de encadernamento torna-se visível assim que a cena é iniciada.
  • Ativar por proximidade: A caixa de limites torna-se visível quando uma mão articulada está perto do objeto.
  • Ativar por ponteiro: A caixa de limites torna-se visível quando é alvo de um ponteiro de raios manuais.
  • Ativar manualmente:A caixa de encadernamento não fica visível automaticamente. Pode ativá-lo manualmente através de um script acedendo à propriedade boundingBox.Ative.

Escala mínima

A escala mínima permitida. Esta propriedade está depreciada e é preferível adicionar um MinMaxScaleConstraint script. Se este script for adicionado, a escala mínima será retirada dele em vez de da caixa de delimitação.

Escala máxima

A escala máxima permitida. Esta propriedade está depreciada e é preferível adicionar um MinMaxScaleConstraint script. Se este script for adicionado, a escala máxima será retirada dele em vez de da caixa de delimitação.

Exibição de caixa

Várias opções de visualização de caixas de delimitação.

Se o eixo flatten está definido para Flatten Auto,o script não permitirá a manipulação ao longo do eixo com a menor extensão. Isto resulta numa caixa de delimitação 2D, que é normalmente usada para objetos finos.

Pegas

Pode atribuir o material e o pré-fabricado para anular o estilo de pega. Se não forem atribuídas pegas, serão exibidas no estilo predefinido.

Eventos

A caixa 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 Terminada:Disparada quando a rotação terminar.
  • Escala Iniciada: Incêndios quando a escala começa.
  • Escala Terminada: Incêndios quando o escalonamento termina.
Eventos

Estilos de manusear

Por padrão, quando atribuir o BoundingBox.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 manípulo de caixa de limites

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

HandStyles 2

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)

Proximidade (Configuração para HoloLens estilo 2)

Mostrar e esconder as pegas com animação com base na distância às mãos. Tem animação de escalonamento de dois passos.

Proximidade
  • Efeito de proximidade Ativo: Permitir ativação de pega baseada na proximidade
  • Cabo De proximidade média: Distância para a escala do 1º passo
  • Cabo Proximidade :Distância para a escala 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 da caixa de delimitação (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 ao alcance da interação da caixa de delimitação (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)

Fazer um objeto móvel com manipulador de manipulação

Uma caixa de delimitação pode ser combinada ManipulationHandler.cs para tornar o objeto móvel usando uma interação distante. 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.

Manipulador de Manipulação

Para que as bordas da caixa de delimitação se comportem da mesma forma ao movê-la utilizando ManipulationHandler a interação distante, é aconselhável ligar os seus eventos para ManipulationHandlerOn Manipulation / / a BoundingBox.HighlightWires / BoundingBox.UnhighlightWires respectivamente, como mostra a imagem acima.

Migrar para o controlo dos limites

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.

Migração do Controlo de Limites