Caixa delimitadora

Caixa delimitadora

Observação

A caixa delimitadora foi preterida e substituída por seu controle de limitesde sucessora. Use uma das opções de migração para atualizar os objetos de jogo existentes.

O BoundingBox.cs script fornece a funcionalidade básica para transformar objetos em realidade misturada. Uma caixa delimitadora mostrará um cubo ao direcionar o holograma para indicar que ele pode ser interagindo. As alças nos cantos e nas bordas do cubo permitem dimensionar ou girar o objeto. A caixa delimitadora também reage à entrada do usuário. no HoloLens 2, por exemplo, a caixa delimitadora responde à proximidade do dedo, fornecendo comentários visuais para ajudar a perceber a distância do objeto. Todas as interações e visuais podem ser facilmente personalizados.

para obter mais informações, consulte caixa delimitadora e barra de aplicativos no Centro de Desenvolvimento Windows.

Cena de exemplo

Você pode encontrar exemplos de configurações de caixa delimitadora na BoundingBoxExamples cena.

Bounding Box Examples

Como adicionar e configurar uma caixa delimitadora usando o Inspetor do Unity

  1. Adicionar Colisor de caixa a um objeto
  2. Atribuir BoundingBox script a um objeto
  3. Configurar opções, como métodos de ' ativação ' (consulte a seção Propriedades do Inspetor abaixo)
  4. Adicional atribua pré-fabricados e materiais para uma caixa delimitadora de estilo de HoloLens 2 (consulte a seção de estilos de identificador abaixo)

Observação

Use o objeto de destino e o campo de substituição de limites no Inspetor para atribuir um objeto específico e um colisor no objeto com vários componentes filho.

Caixa delimitadora 1

Como adicionar e configurar uma caixa delimitadora no código

  1. Criar instância de gameobject do cubo

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Atribuir BoundingBox script a um objeto com o colisor, usando o addComponent<> ()

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. Configurar opções (consulte a seção 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. Adicional atribua pré-fabricados e materiais para uma caixa delimitadora de estilo de HoloLens 2. Isso ainda requer atribuições por meio do Inspetor, pois os materiais e pré-fabricados devem ser carregados dinamicamente.

Observação

O uso da pasta ' recursos ' ou do sombreador do Unity. não é recomendável localizar sombreadores dinamicamente, pois as permutações do sombreador podem estar ausentes 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 a escala mínima e máxima da caixa delimitadora usando MinMaxScaleConstraint

Para definir a escala mínima e máxima, use o MinMaxScaleConstraint . Você também pode usar 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: adicionar uma caixa delimitadora em um objeto de jogo

Para adicionar uma caixa delimitadora em um objeto, basta adicionar um BoundingBox componente a ela:

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

Propriedades do Inspetor

Objeto de destino

Esta propriedade especifica qual objeto será transformado pela manipulação da caixa delimitadora. Se nenhum objeto for definido, a caixa delimitadora definirá como padrão o objeto do proprietário.

Substituição de limites

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

Comportamento de ativação

Há várias opções para ativar a interface da caixa delimitadora.

  • Ativar ao iniciar: a caixa delimitadora fica visível quando a cena é iniciada.
  • Ativar por proximidade: a caixa delimitadora fica visível quando uma mão articulada está perto do objeto.
  • Ativar por ponteiro: a caixa delimitadora torna-se visível quando é direcionada por um ponteiro de raio à mão.
  • Ativar manualmente: a caixa delimitadora não se torna visível automaticamente. Você pode ativá-lo manualmente por meio de um script acessando a propriedade boundingBox. Active.

Mínimo de escala

A escala mínima permitida. Essa propriedade é preterida e é preferível adicionar um MinMaxScaleConstraint script. Se esse script for adicionado, a escala mínima será retirada dele, em vez da caixa delimitadora.

Máximo de escala

A escala máxima permitida. Essa propriedade é preterida e é preferível adicionar um MinMaxScaleConstraint script. Se esse script for adicionado, a escala máxima será retirada dele, em vez da caixa delimitadora.

Exibição da caixa

Várias opções de visualização de caixa delimitadora.

Se o eixo achatado for definido como automático achatado, o script não permitirá a manipulação ao longo do eixo com a menor extensão. Isso resulta em uma caixa delimitadora de 2D, que geralmente é usada para objetos finos.

Alças

Você pode atribuir o material e o pré-fabricado para substituir o estilo do identificador. Se nenhum identificador for atribuído, ele será exibido no estilo padrão.

Eventos

A caixa delimitadora fornece os seguintes eventos. Este exemplo usa esses eventos para reproduzir comentários de áudio.

  • Rotação iniciada: acionada quando a rotação é iniciada.
  • Rotação encerrada: acionada quando a rotação termina.
  • Escala iniciada: acionada quando o dimensionamento é iniciado.
  • Escala encerrada: acionada quando o dimensionamento termina.
Events

Estilos de identificador

por padrão, quando você apenas atribui o BoundingBox.cs script, ele mostrará o identificador do estilo de HoloLens 1ª gen. para usar os identificadores de estilo HoloLens 2, você precisa atribuir o identificador adequado pré-fabricados e materiais.

Estilos de identificador de caixa delimitadora

abaixo estão os valores de pré-fabricados, materiais e dimensionamento para os identificadores de caixa delimitadora de HoloLens 2. Você pode encontrar este exemplo na BoundingBoxExamples cena.

HandStyles 2

identificadores (instalação para HoloLens estilo 2)

  • Material de tratamento: BoundingBoxHandleWhite. passe-partout
  • Tratar material capturado: BoundingBoxHandleBlueGrabbed. passe-partout
  • Identificador de escala pré-fabricado: MRTK_BoundingBox_ScaleHandle. pré-fabricado
  • Alça de escala Slate pré-fabricado: MRTK_BoundingBox_ScaleHandle_Slate. pré-fabricado
  • Tamanho do identificador de escala: 0, 16 (1.6 cm)
  • Enchimento do Colisador da alça de escala: 0, 16 (torna o colisor de captura ligeiramente maior que o Visual do manipulador)
  • Identificador de rotação pré-fabricado: MRTK_BoundingBox_RotateHandle. pré-fabricado
  • Tamanho da alça de rotação: 0, 16
  • Enchimento do Colisador da alça de rotação: 0, 16 (torna o colisor de captura ligeiramente maior que o Visual do manipulador)

proximidade (configuração para o estilo HoloLens 2)

Mostrar e ocultar os identificadores com animação com base na distância para as mãos. Ele tem uma animação de dimensionamento em duas etapas.

Proximity
  • Efeito de proximidade ativo: habilitar a ativação de identificador baseado em proximidade
  • Lidar com a proximidade média: distância para o dimensionamento da 1ª etapa
  • Lidar com proximidades próximas: distância para o dimensionamento da 2ª etapa
  • Escala extrema: o valor de escala padrão do ativo de identificador quando as mãos estão fora do intervalo da interação da caixa delimitadora (distância definida acima por ' tratar a proximidade média '. Use 0 para ocultar o identificador por padrão)
  • Escala média: o valor de escala do ativo de identificador quando as mãos estão dentro do intervalo da interação da caixa delimitadora (distância definida acima por ' manipular proximidades '. Use 1 para mostrar o tamanho normal)
  • Fechar escala: o valor de escala do ativo de identificador quando as mãos estão dentro do intervalo da interação de captura (distância definida acima por ' manipular proximidades à próxima '. Use 1. x para mostrar um tamanho maior)

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

Uma caixa delimitadora pode ser combinada com ManipulationHandler.cs o para tornar o objeto móvel usando a interação distante. O manipulador de manipulação dá suporte a interações de uma e de duas mãos. O rastreamento manual pode ser usado para interagir com um objeto de perto.

Manipulation Handler

Para que as bordas da caixa delimitadora se comportem da mesma maneira ao movê-la usando a ManipulationHandler interação de longe, é aconselhável conectar seus eventos para a manipulação iniciada / na manipulação finalizada BoundingBox.HighlightWires / BoundingBox.UnhighlightWires , conforme mostrado na captura de tela acima.

Migrando para controle de limites

Pré-fabricados e instâncias existentes usando a caixa delimitadora podem ser atualizados para o novo controle de limites por meio da janela de migração que faz parte do pacote de ferramentas do MRTK.

Para atualizar instâncias individuais da caixa delimitadora também há uma opção de migração dentro do Inspetor de propriedades do componente.

Bounds Control Migrate