Manipulador de objetos – MRTK3
O ObjectManipulator
permite a manipulação intuitiva de objetos no espaço 3D com qualquer modalidade ou dispositivo de entrada. Ele executa uma tarefa semelhante à XRGrabInteractable
do XRI, mas oferece recursos adicionais e interações específicas da realidade misturada. Embora o XRGrabInteractable
seja totalmente compatível com nossos interagentes (e vice-versa), ainda recomendamos o uso da nossa implementação para obter a melhor experiência possível.
Observação
O ObjectManipulator
foi projetado especificamente para manipular objetos 3D de maneira direta e intuitiva. Se você estiver procurando interações comuns da interface do usuário, como controles deslizantes ou botões, veja os artigos controles deslizantes e botões. Evite usar o ObjectManipulator
para gravar microinterações.
Arquitetura
No MRTK v2, a maior parte da lógica e da matemática complexas dos diferentes tipos de entrada eram processadas pelo próprio ObjectManipulator
. Um codepath separado teve que ser mantido para cada tipo de interação, resultando em menos flexibilidade ao introduzir novos tipos de interações. No MRTK3, o interagente é responsável pelas especificidades de como um tipo específico de entrada é convertido em uma manipulação. O ObjectManipulator simplesmente escuta esses interagentes e aplica a transformação relevante ao objeto. Como resultado, o ObjectManipulator
no MRTK3 é significativamente mais simples e tem um escopo menor. Consulte a Arquitetura do interagente para obter descrições de como os interagentes se comunicam por meio de suas transformações de anexação.
Manipulações de n
mãos
O ObjectManipulator
dá suporte a qualquer número de interagentes participantes, permitindo um comportamento de interação generalizável em manipulações de uma, duas e até mesmo n
mãos. Geralmente, o centroide geométrico de todos os attachTransforms dos participantes é usado para interações com várias mãos. Por ser um interativo do XRI, ele é compatível com qualquer tipo de interagentes que envie uma transformação de anexação com comportamento válido.
Se você não quiser permitir manipulações com várias mãos, defina o XRI Selection Mode
como Single
. Nomeamos essa propriedade no inspetor com o nome Multiselect Mode
mais específico, a fim de evitar confusão com o Selection Mode
do MRTK, usado para especificar se um interativo é alternável (confira a documentação do Botão para saber mais).
Restrições
O ObjectManipulator
usa a API de restrições para restringir as manipulações. Consulte a Documentação de restrições para obter mais informações.
Injeção lógica de manipulação
Os desenvolvedores podem personalizar o comportamento de manipulação do ObjectManipulator
sem precisar subclassificar nem modificar o script. Basta escrever um novo ManipulationLogic<T>
e especificar o tipo no inspetor com a ManipulationLogicTypes
propriedade .
Da mesma forma, os desenvolvedores podem personalizar o comportamento de suavização escrevendo uma nova implementação de ITransformSmoothingLogic
e especificando o tipo no inspetor com a TransformSmoothingLogicType
propriedade .
Importante
Se você se encontrar escrevendo novos tipos de lógica de manipulação para um novo tipo de interação ou dispositivo de entrada, provavelmente você está indo pelo caminho errado. A lógica de manipulação existente deve funcionar para qualquer tipo de entrada, desde que a transformação de anexação tenha um comportamento válido. Considere ajustar ou escrever um novo interagente. Leia a Documentação de arquitetura do interagente e a Documentação de arquitetura do interativo para obter mais informações sobre como escrever uma lógica de interação bem comportada.