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轴来修复它,因为它“低于”地平面。