Для этой цели в RealityKit есть инициализатор plane
(и регистр перечисления):
convenience init(plane alignment: AnchoringComponent.Target.Alignment,
classification: AnchoringComponent.Target.Classification,
minimumBounds: SIMD2<Float>)
/* Where `minimumBounds` is the minimum size of the target plane */
Это аналог ARPlaneAnchor
ARKit со свойством extent
(это предполагаемая ширина и длина обнаруженная плоскость). Но в RealityKit он работает немного по-другому.
В реальном коде вы можете использовать его следующим образом:
let anchor = AnchorEntity(.plane([.horizontal, .vertical],
classification: [.wall, .table, .floor],
minimumBounds: [0.375, 0.375]))
/* Here we create an anchor for detected planes with a minimum area of 37.5 cm2 */
anchor.addChild(semiTranparentPlaneEntity) // visualising a detected plane
arView.scene.anchors.append(anchor)
Обратите внимание, что аргументы alignment
и classification
соответствуют OptionSet протокол.
И вы всегда можете узнать, создал якорь плоскости:
let arView = ARView(frame: .zero)
let anchor = AnchorEntity(.plane(.any, classification: .any,
minimumBounds: [0.5, 0.5]))
anchor.name = "PlaneAnchor"
let containsOrNot = arView.scene.anchors.contains(where: {
$0.name == "PlaneAnchor"
})
print(containsOrNot)
print(arView.scene.anchors.count)
print(arView.scene.anchors.first?.anchor?.id)