Сначала мы должны поместить текст в якорь, который останется в той же ориентации, даже когда мы поворачиваем текст. Затем добавьте переменную textIsMirrored
, которая будет обрабатывать поворот при изменении:
class TextAnchor: Entity,HasAnchoring {
let textEntity = ModelEntity(mesh: .generateText("text"))
var textIsMirrored = false {
willSet {
if newValue != textIsMirrored {
if newValue == true {
textEntity.setOrientation(.init(angle: .pi, axis: [0,1,0]), relativeTo: self)
} else {
textEntity.setOrientation(.init(angle: 0, axis: [0,1,0]), relativeTo: self)
}
}
}
}
required init() {
super.init()
textEntity.scale = [0.01,0.01,0.01]
anchoring = AnchoringComponent(.plane(.horizontal, classification: .any, minimumBounds: [0.3,0.3]))
addChild(textEntity)
}
}
Затем в вашем ViewController
вы можете создать привязку, которая будет иметь камеру в качестве цели, чтобы мы могли отслеживать положение камеры и создавать textAnchor
:
let cameraAnchor = AnchorEntity(.camera)
let textAnchor = TextAnchor()
Чтобы он работал, вы должны добавить его как дочерний элемент вашей сцены (желательно в viewDidLoad
):
arView.scene.addAnchor(cameraAnchor)
arView.scene.addAnchor(textAnchor)
Теперь в функции ARSessionDelegate вы можете проверить положение камеры относительно вашего текста и повернуть ее, если ось Z ниже 0:
func session(_ session: ARSession, didUpdate frame: ARFrame) {
if cameraAnchor.position(relativeTo: textAnchor).z < 0 {
textAnchor.textIsMirrored = true
} else {
textAnchor.textIsMirrored = false
}
}
person
RealUglyDuck
schedule
13.08.2020