Swift ARKit拖动对象会更改比例

Swift ARKit拖动对象会更改比例,swift,scenekit,arkit,scnnode,Swift,Scenekit,Arkit,Scnnode,İ我试图将放置在表面上的SCNNode对象移动到表面上。İt移动,但当我第一次开始移动时,刻度发生变化,并且变小 这就是我所做的 @IBAction func dragBanana(_ sender: UIPanGestureRecognizer) { guard let _ = self.sceneView.session.currentFrame else {return} if(sender.state == .began) { let location

İ我试图将放置在表面上的SCNNode对象移动到表面上。İt移动,但当我第一次开始移动时,刻度发生变化,并且变小

这就是我所做的

@IBAction func dragBanana(_ sender: UIPanGestureRecognizer) {
    guard let _ = self.sceneView.session.currentFrame else {return}

    if(sender.state == .began) {
        let location = sender.location(in: self.sceneView)
        let hitTestResult = sceneView.hitTest(location, options: nil)
        if !hitTestResult.isEmpty {
            guard let hitResult = hitTestResult.first else {return}
            movedObject = hitResult.node
        }
    }
    if (sender.state == .changed) {
        if(movedObject != nil) {
            let location = sender.location(in: self.sceneView)
            let hitTestResult = sceneView.hitTest(location, types: .existingPlaneUsingExtent)
            guard let hitResult = hitTestResult.first else {return}
            let matrix = SCNMatrix4(hitResult.worldTransform)
            let vector = SCNVector3Make(matrix.m41, matrix.m42, matrix.m43)
            movedObject?.position = vector
        }
    }
    if (sender.state == .ended) {
        movedObject = nil
    }
}

这是因为你在3轴上移动对象,Z轴发生变化,这就是为什么它感觉像是在缩放,但它只会离你越来越近。

我的答案可能很晚,但我自己也遇到了这个问题,我花了一段时间才弄清楚为什么会发生这种情况。我将分享我的经验,也许你能体会到

我的问题是,在运行时更改节点的比例后,我试图更改节点的位置(添加时,我的大多数3D资源都非常大,我用一个收缩手势将它们缩小)。我注意到,改变比例是导致职位变动无法按预期进行的原因

我找到了一个非常简单的解决办法。您只需更改此行:

movedObject?.position = vector
为此:

movedObject?.worldPosition = vector
根据
SCNNode
position
属性确定节点相对于其父节点的位置。而
worldPosition
是节点相对于场景根节点的位置(即
ARSCNView
的世界原点)

我希望这能回答你的问题