Как переместить виртуальный объект на обнаруженную плоскость - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь переместить виртуальный объект с динамическим физическим телом на обнаруженную плоскость, но после перемещения он начинает прыгать и качаться. Я добавил floorNode на обнаруженную поверхность с помощью Kinematic physic. Это мой код func didPan (_ жест: ThresholdPanGesture) {жест жеста.state {case .began:

        if let object = objectNodeInteracting(with: gesture, in: sceneView) {
            if object.name == "plane"{
                return
            }
            selectedCube = object
        }
        let holdPoint = gesture.location(in: self.sceneView)
        let result = self.sceneView.hitTest(holdPoint, types: .estimatedHorizontalPlane)
        if (result.count == 0) {
            return;
        }
        let  hitResult = result.first
        let transform = hitResult?.worldTransform
        let dist = SCNVector3.init((transform?.columns.3.x)!, (transform?.columns.3.y)!, (transform?.columns.3.z)!)
        prevusPonit = dist
        PCoordx = (result.first?.worldTransform.columns.3.x)!
        PCoordz = (result.first?.worldTransform.columns.3.z)!

    case .changed:
        if selectedCube == nil  {
            return
        }
        let holdPoint = gesture.location(in: self.sceneView)
        let result = self.sceneView.hitTest(holdPoint, types: .estimatedHorizontalPlane)
        if (result.count == 0) {
            return;
        }
        let  hitResult = result.first
        let transform = hitResult?.worldTransform

        if let coordx = result.first?.worldTransform.columns.3.x{
            if let coordz = result.first?.worldTransform.columns.3.z{

                let action = SCNAction.moveBy(x: CGFloat(coordx-PCoordx), y: 0.0, z: CGFloat(coordz-PCoordz), duration: 0.01)
                SCNTransaction.begin()
                selectedCube!.parent!.runAction(action)
                SCNTransaction.commit()
                PCoordx = coordx
                PCoordz = coordz
            }
        }
        gesture.setTranslation(CGPoint.zero, in: sceneView)
        break

    case .ended:
        break
    default:
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...