Предположим, что мы создали три сцены в реальности Composer с именем BoxScene
для обнаружения в горизонтальной плоскости (отслеживание мира), StarScene
для обнаружения в вертикальной плоскости ( world tracking) и PrismScene
для обнаружения изображений (отслеживание изображений) соответственно. В каждой сцене мы дали имена нашим моделям - из этих имен автоматически создаются c переменные - goldenBox
, plasticStar
и paintedPrism
.
Для переключения с World Tracking
config на Image Tracking
config в RealityKit мы должны использовать определенные инициализаторы AnchorEntity, написанные внутри кнопок @IBActions - .image
и .plane
.
Посмотрите на следующий код, чтобы узнать, как делать то, что вы хотите.
import RealityKit
import UIKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
let cubeScene = try! Experience.loadBoxScene()
let starScene = try! Experience.loadStarScene()
let prismScene = try! Experience.loadPrismScene()
// IMAGE TRACKING
@IBAction func image(_ button: UIButton) {
arView.scene.anchors.removeAll()
let anchor = AnchorEntity(.image(group: "AR Resources",
name: "image"))
let prism = prismScene.paintedPrism!
anchor.addChild(prism)
arView.scene.anchors.append(anchor)
}
// WORLD TRACKING
@IBAction func verticalAndHorizontal(_ button: UIButton) {
arView.scene.anchors.removeAll()
let trackingAnchor = AnchorEntity(.plane([.vertical, .horizontal],
classification: .any,
minimumBounds: [0.1, 0.1]))
let cube = cubeScene.goldenBox!
let star = starScene.plasticStar!
if trackingAnchor.anchor?.anchoring.target == .some(.plane([.vertical,
.horizontal],
classification: .any,
minimumBounds: [0.1, 0.1])) {
let anchor1 = AnchorEntity(.plane(.horizontal,
classification: .any,
minimumBounds: [0.1, 0.1]))
anchor1.addChild(cube)
arView.scene.anchors.append(anchor1)
}
if trackingAnchor.anchor?.anchoring.target == .some(.plane([.vertical,
.horizontal],
classification: .any,
minimumBounds: [0.1, 0.1])) {
let anchor2 = AnchorEntity(.plane(.vertical,
classification: .any,
minimumBounds: [0.1, 0.1]))
anchor2.addChild(star)
arView.scene.anchors.append(anchor2)
}
}
}
PS
Компьютера с собой пока нет, написал на iPhone. Так что я не знаю, есть ли в этом коде ошибки ...