程序效果:
程序代码(您需要创建两个文件)
文件1(MyApp):
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
Reality()
}
}
}
文件2(Reality):
import SwiftUI
import RealityKit
struct Reality: View {
var body: some View {
ZStack{
ARViewContainer()
.edgesIgnoringSafeArea(.all)
Image(systemName: "moonphase.full.moon.inverse")
}
}
}
struct ARViewContainer: UIViewRepresentable {
func makeUIView(context: UIViewRepresentableContext<ARViewContainer>) -> ARView {
let arView = ARView(frame: .zero, cameraMode: .ar, automaticallyConfigureSession: true)
let anchorEntity = AnchorEntity(plane: .horizontal)
arView.Placement()//放置物体 1/2
arView.scene.addAnchor(anchorEntity)
return arView
}
func updateUIView(_ uiView: ARView, context: Context) {}
}
extension ARView{//放置物体 2/2
func Placement() {
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:)))
self.addGestureRecognizer(tapGestureRecognizer)//点击行为1/2
}//手势
@objc func handleTap(recognizer: UITapGestureRecognizer) {//手势内容
let anchorEntity = AnchorEntity(plane: .horizontal)//水平类锚点
let ARentity = ModelEntity(mesh: MeshResource.generateBox(size: 0.2/2, cornerRadius: 0.05/5), materials: [SimpleMaterial(color: .blue, isMetallic: true)])//实体(加载模型)
anchorEntity.addChild(ARentity)
self.scene.addAnchor(anchorEntity)//点击行为2/2
}
}
备注:创建一个手势,点击将加载实体。