我正在屏幕上创建文本,希望有一个3D背景,就像一个3D牌匾上的文字.我可以将文本放在屏幕上,但我不知道如何让框显示为与文本后面的文本具有相同的宽度、高度和位置.我假设我应该能够将它设置为与文本相同,然后它将在文本中,然后我在Z访问上稍微翻译回来,它将在它后面.包括代码和我所得到的图像.如何才能使紫色框覆盖文本的宽度和高度相同,并且可以根据文本动态变化?
var body: some View {
RealityView { content in
let headAnchor = AnchorEntity(.head)
headAnchor.anchoring.trackingMode = .once
let model = GetText(testString)
model.setParent(headAnchor)
model.name = "test"
model.transform.translation.z = -0.75
model.transform.translation.y = -1.25
model.transform.translation.x = -model.visualBounds(relativeTo: nil).extents.x / 2
let blackBoxModel = ModelEntity(
mesh: .generateBox(size: SIMD3<Float>(0.5,0.5,0.05), cornerRadius: 0.1),
materials: [UnlitMaterial(color: .purple)])
blackBoxModel.position = SIMD3<Float>(model.components[ModelComponent.self]!.mesh.bounds.max.x - model.components[ModelComponent.self]!.mesh.bounds.min.x, model.visualBounds(relativeTo: nil).extents.y, -0.75)
blackBoxModel.setParent(headAnchor)
content.add(headAnchor)
}
}
func GetText(_ newText: String) -> ModelEntity {
let depthVar: Float = 0.01
let fontVar = UIFont.systemFont(ofSize: 0.1)
let containerFrameVar = CGRect(x: 0, y: 0, width: 1, height: 1)
let alignmentVar: CTTextAlignment = .center
let lineBreakModeVar : CTLineBreakMode = .byWordWrapping
let model = ModelEntity(
mesh: .generateText(newText, extrusionDepth: depthVar, font: fontVar, containerFrame: containerFrameVar, alignment: alignmentVar, lineBreakMode: lineBreakModeVar),
materials: [SimpleMaterial(color: .white, isMetallic: true)])
// Enable interactions on the entity.
model.components.set(InputTargetComponent())
model.generateCollisionShapes(recursive: false)
model.components.set(HoverEffectComponent())
return model
}