RealityUiは、RealityKitのユーティリティとUIオブジェクトのコレクションです。 RealityUIに含まれるUIオブジェクトは、おなじみのユーザーインターフェイス標準を提供することを目的としていますが、RealityKitを通じて拡張された仮想現実のための3D設定です。
RealityUiには、タッチまたはドラッグの相互作用を通じて、あらゆるエンティティとインターフェースするためのコンポーネントのコレクションもあります。



このリポジトリのURLをProject > Swift Packagesの下でXcode 11+プロジェクトに追加します。
https://github.com/maxxfrazer/RealityUI.git
Swiftファイルの上部にimport RealityUI追加して開始します。
RealesyUIで使用されるすべてのコンポーネントは、使用する前に登録する必要があります。RUI RUI始まるクラスが問題を回避するために、アプリのどこにでもRealityUI.registerComponents()を呼び出す必要があります。コンポーネントを登録することの意味の詳細については、Appleのドキュメントはこちらをご覧ください。
VisionOSを使用すると、 View/addRUIDragGesture()またはView/addRUITapGesture()修飾子を使用して、RealityViewでジェスチャー.gesture(RUIDragGesture())有効.gesture(RUITapGesture())することができます。 RealityViewは次のように見えるかもしれません:
RealityView { content in
let swtch = RUISwitch ( )
swtch . scale = . init ( repeating : 0.1 )
content . add ( swtch )
} . addRUIDragGesture ( )上記のスニペットは、インタラクティブなスイッチ/トグルをシーンに追加します。
このジェスチャーは、ruidragComponentの任意のエンティティで機能します。
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 ( ) 
RealityUiのジェスチャーを有効にすることはRealityUI.enableGestures(.all, on: ARView)を呼び出し、 ARViewがArviewオブジェクトのインスタンスです。
Ruislider、Ruiswitch、Ruistepper、Ruibuttonはすべて、 RUIDragComponent .ruiDrag使用しています。コンポーネントRUITapComponentを使用する要素を追加する場合は、Gesture .tapを使用できます。ジェスチャーを有効にするときは、 .all使用することをお勧めします。これらは、リアリティが発展するにつれて必然的に動き回るからです。
RealityUI.enableGestures(.all, on: arView)
デフォルトでは、すべてのRealityUIエンティティは非常に大きいです。これは、サイズを標準化するために使用され、常に何を期待すべきかを常に把握できます。たとえば、すべてのUI親指は、直径1メートルの球体であり、RealityKitの1ユニット、±パディングの調整です。すべてのRealityUIエンティティは、デフォルトで[0, 0, -1]に直面しています。ユーザーカメラ、または.zeroを指すには、.look .look(at: .zero, from: [0, 0, 1]) .look(at:,from:,relativeTo:)のような方法を使用できます。または、 [0, 0, -1]に配置した場合にすぐに向きを変えたい場合は、方向をsimd_quatf(angle: .pi, axis: [0, 1, 0])に設定します。 .look()メソッドを使用して、ボタンを使用する方向にat:設定することにより、ここで動作します。
Ruiswitchは、オンとオフ状態の3Dトグルスイッチです。デフォルトの境界ボックスは2x1x1mです

詳細
Ruistepperは、値を増やすか減少させるために使用されます。デフォルトの境界ボックスは2x1x0.25mです

詳細
補間された価値を表すインタラクティブなトラック。デフォルトの境界ボックスは、親指を含む10x1x1mです。

詳細
Ruibuttonは、指定されたアクションを開始するために使用されます。ここでのアクションは、ジェスチャーがボタンで始まり、同じボタンで終了する場合にのみトリガーされます。これは、Touchupinside Uicontrolイベントに似ています。ボタンをベースに押し込む前のデフォルトボタンの境界ボックスは[1, 1, 0.3]です

詳細
すべてのRealityUi制御エンティティは、RealityKitで標準ではないカスタムジェスチャーを使用していますが、それらのいくつかは隔離されているため、誰でも使用して独自のRealityKitシーンを操作できます。
.Moveタイプを使用して、RuidRagComponentを使用して、3つの自由度を持つ空間のどこにでもオブジェクトをドラッグします。

このタイプには、特定の基準内で動きを修正するためのオプションの制約があります。
ボックスの制約:指定されたBoundingBox内の動きを制限し、エンティティが移動できる定義された領域を提供します。
ポイントの制約: SIMD3<Float>の配列として表される、事前定義されたポイントのセットへの移動を制限します。
クランプ制約:カスタムクランプ関数を使用して動きを制御します。この関数はSIMD3<Float>を入力として使用し、変更されたSIMD3<Float>を返して新しい位置を決定します。
1本の指でRealityKitエンティティを回転させる機能のロックを解除します。

詳細
アクションでRealityKitシーンにオブジェクトを作成すると、ユーザーがタップするたびに自動的にピックアップされます!
これについてはGIFはありませんが、RuitapComponentをチェックして、アプリケーションのエンティティにこれを追加する方法を確認してください。
代わりに、「内部のタッチアップ」タップに似たものを使用したい場合は、ruidragComponentType/クリックを使用できます。

デフォルトでRealityKitに追加されたアニメーションは多くありません。特に、繰り返し設定できるものはありません。これらのアニメーションの使用方法については、Wikiページを参照してください。
ruispinを使用して、軸の周りにエンティティを回転させます。
詳細
エンティティを振って注意を引き付けるか、何かが間違っていることを知らせます。
詳細
realitykitにテキストを配置することはすでに可能ですが、少しアップグレードが必要だと感じました。
ruitextを使用すると、指定されたテキストがエンティティの中央にある境界ボックスセンターで配置されたエンティティを簡単に作成できます。

詳細
ドキュメントのこの迅速なパッケージで提供されるすべての情報。
また、このリポジトリのiOSの例のプロジェクトも参照してください。