Swift 我能';不要在加载的SceneKit模型周围移动
下面是加载我的对象的函数。每当我运行应用程序时,对象都能完美加载,但当我试图靠近或四处移动时,它会随着相机移动。我尝试使用命中测试加载,但当我使用命中结果和世界定位时,碰撞不起作用Swift 我能';不要在加载的SceneKit模型周围移动,swift,scenekit,augmented-reality,arkit,Swift,Scenekit,Augmented Reality,Arkit,下面是加载我的对象的函数。每当我运行应用程序时,对象都能完美加载,但当我试图靠近或四处移动时,它会随着相机移动。我尝试使用命中测试加载,但当我使用命中结果和世界定位时,碰撞不起作用 func addBackboard() { guard let bucketScene = SCNScene(named:"art.scnassets/BucketBlue.scn") else { return } guard let bucketNode = bucket
func addBackboard() {
guard let bucketScene = SCNScene(named:"art.scnassets/BucketBlue.scn") else {
return
}
guard let bucketNode = bucketScene.rootNode.childNode(withName: "tube", recursively: false) else {
return
}
bucketNode.scale = SCNVector3Make(0.5, 0.5, 0.5);
bucketNode.position = SCNVector3(x: 0, y: -3.5, z: -5)
let physicsShape = SCNPhysicsShape(node: bucketNode, options: [SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.concavePolyhedron])
let physicsBody = SCNPhysicsBody(type: .static, shape: physicsShape)
bucketNode.physicsBody = physicsBody
sceneView.scene.rootNode.addChildNode(bucketNode)
}
我找到了一些可能有用的。小结:“要跟踪真实或虚拟对象相对于相机的静态位置和方向,请创建定位对象并使用add(anchor:)
方法将其添加到AR会话中。”
然后,您是否实现了ARSCNViewDelegate方法?我想您的代码应该如下所示:
class ViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet var sceneView: ARSCNView!
//.................................
func addBackboard() {
sceneView.delegate = self
guard let scene = SCNScene(named:"art.scnassets/BucketBlue.scn") else {
return
}
sceneView.scene = scene
let bucketNode = SCNNode()
bucketNode.geometry = SCNTube()
bucketNode.scale = SCNVector3(0.5, 0.5, 0.5)
bucketNode.position = SCNVector3(x: 0, y: -3.5, z: -5)
let physicsShape = SCNPhysicsShape(
node: bucketNode,
options: [SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.concavePolyhedron])
let physicsBody = SCNPhysicsBody(type: .static, shape: physicsShape)
bucketNode.physicsBody = physicsBody
scene.rootNode.addChildNode(bucketNode)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let configuration = ARWorldTrackingConfiguration()
sceneView.session.run(configuration)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
sceneView.session.pause()
}
}
实际上,只有位置向量不正确。我通过改变Y轴来修复它,因为它“低于”地平面。