Realityui é uma coleção de utilitários e objetos da interface do usuário do RealityKit. Os objetos da interface do usuário incluídos na realidade pretendem oferecer padrões familiares de interface de usuário, mas em uma configuração 3D para realidade aumentada e virtual através do RealityKit.
A Realityui também possui uma coleção de componentes para interface com qualquer entidade através de interações de toque ou arrasto.



Adicione o URL deste repositório ao seu projeto Xcode 11+ em Project > Swift Packages .
https://github.com/maxxfrazer/RealityUI.git
Adicione import RealityUI à parte superior do seu arquivo SWIFT para iniciar.
RUI os componentes usados na realidade do realidade devem ser registrados antes de serem usados, basta chamar de RealityUI.registerComponents() . Para obter mais informações sobre o que se entende por registrar componentes, consulte a documentação da Apple aqui.
Com .gesture(RUITapGesture()) Visionos, os gestos podem ser ativados em uma visão de realidade usando modificadores View/addRUIDragGesture() ou View/addRUITapGesture() , ou adicionando os gestos diretamente com .gesture(RUIDragGesture()) O RealityView pode parecer algo assim:
RealityView { content in
let swtch = RUISwitch ( )
swtch . scale = . init ( repeating : 0.1 )
content . add ( swtch )
} . addRUIDragGesture ( )O trecho acima adiciona um interruptor/alternância interativa à cena.
Este gesto funciona para qualquer entidade com RuidragComponent, por exemplo:
RealityView { content in
let movable = try ! await ModelEntity ( named : " toy_biplane " )
movable . generateCollisionShapes ( recursive : false )
movable . components . set ( RUIDragComponent ( type : . move ( nil ) ) )
movable . components . set ( InputTargetComponent ( ) )
content . add ( movable )
} . addRUIDragGesture ( ) 
Os gestos de realidade que possam ARView doen chamando RealityUI.enableGestures(.all, on: ARView) .
Ruislider, Ruiswitch, Ruistepper e Ruibutton usam RUIDragComponent , que requer .ruiDrag . Se você estiver adicionando elementos que usam o componente RUITapComponent poderá usar o gesto .tap . Eu recomendaria o uso de .all Tudo ao ativar gestos, pois eles inevitavelmente se moverão à medida que a realidade se desenvolve.
RealityUI.enableGestures(.all, on: arView)
Por padrão, todas as entidades de realidade são bastante grandes. Isso é usado para padronizar os tamanhos, para que você sempre saiba o que esperar. Por exemplo, todos os polegares da interface do usuário são esferas com um diâmetro de 1 metro, que é 1 unidade no realidade, ± qualquer ajuste de preenchimento. Todas as entidades de realidade enfrentam [0, 0, -1] por padrão. Para que eles apontem para a câmera do usuário, ou .zero , você pode usar o .look(at:,from:,relativeTo:) Método como assim: .look(at: .zero, from: [0, 0, 1]) . Ou, se você quiser, virar imediatamente se você o posicionar em [0, 0, -1] , defina a orientação como simd_quatf(angle: .pi, axis: [0, 1, 0]) . O uso do método .look () funciona aqui definindo o valor at: na direção em que o botão deve ser usado.
Ruiswitch é um interruptor 3D de alternância com um estado ligado e desligado. A caixa delimitadora padrão é 2x1x1m

Mais detalhes
Ruistepper é usado para incrementar ou diminuir um valor. A caixa delimitadora padrão é 2x1x0.25m

Mais detalhes
Uma faixa interativa para representar um valor interpolado. A caixa delimitadora padrão é 10x1x1m, incluindo o polegar.

Mais detalhes
O RUIBUTTON é usado para iniciar uma ação especificada. A ação aqui só acionará se o gesto começar em um botão e também terminar no mesmo botão. Isso é semelhante ao evento Uicontrol no toqueside. Caixa de limite padrão do botão antes de pressionar o botão na base é [1, 1, 0.3]

Mais detalhes
Todas as entidades de controle da realidade usam gestos personalizados que não são padrão no realidade, mas alguns deles foram isolados para que qualquer um possa usá -los para manipular sua própria cena de realidade.
Arraste os objetos em qualquer lugar no espaço com 3 graus de liberdade com o RuidRagComponent, usando o tipo .move.

Este tipo tem uma restrição opcional, para corrigir o movimento dentro de certos critérios:
Restrição da caixa : restringe o movimento dentro de um BoundingBox especificado, fornecendo uma área definida onde a entidade pode se mover.
Pontos Restrição : Limita o movimento a um conjunto de pontos predefinidos, representados como uma matriz de SIMD3<Float> .
Restrição de grampo : usa uma função de fixação personalizada para controlar o movimento. Esta função leva um SIMD3<Float> como entrada e retorna um SIMD3<Float> para determinar a nova posição.
Desbloqueie a capacidade de girar uma entidade de realidade com apenas um dedo.

Mais detalhes
Crie um objeto em sua cena de realidade com uma ação e ele será automaticamente recolhido sempre que o usuário tocar!
Não há gif para este, mas consulte o RuitapComponent para ver como adicionar isso a uma entidade em seu aplicativo.
Se você quisesse usar algo semelhante a uma torneira "Touch up dentro", pode usar o RuidRagComponentType/Click.

Não há muitas animações adicionadas por padrão ao RealityKit, especialmente nenhuma que você possa definir para repetir. Veja a página do Wiki sobre como usar essas animações.
Gire uma entidade em torno de um eixo facilmente usando Ruispin.
Mais detalhes
Agite uma entidade para atrair atenção ou sinalizar algo estava incorreto.
Mais detalhes
Já é possível colocar texto no realidade, mas senti que precisava de uma pequena atualização.
Com o Ruitext, você pode criar facilmente uma entidade com o texto especificado colocado com seu centro de caixa delimitador no meio da sua entidade.

Mais detalhes
Mais informações sobre tudo fornecido neste pacote SWIFT na documentação.
Veja também o projeto de exemplo para iOS neste repositório.