一、程序效果
二、程序代码(您需要创建两个文件)
【文件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: UIColor( colorLiteral(red: 0.23080918192863464, green: 1.0000001192092896, blue: 0.5888275504112244, alpha: 1.0)), isMetallic: true)])//实体(加载模型)
//MARK: all,rotation,scale,translation
ARentity.generateCollisionShapes(recursive: true)
self.installGestures(.all, for: ARentity)
//ARentity.generateCollisionShapes(recursive: true)
anchorEntity.addChild(ARentity)
self.scene.addAnchor(anchorEntity)//点击行为2/2
}
}
备注:通过 installGestures,允许模型旋转、缩放、平移。
目录:https://docs.qq.com/mind/DTE5ScEFsRW5yQklw