SceneKit переместить объект поверх другого - PullRequest
0 голосов
/ 25 декабря 2018

Я новичок в SceneKit и программирую игру.Я загрузил два объекта в мою сцену.Первый объект не двигается, только второй.Два объекта всегда должны слипаться, но второй объект может свободно перемещаться по поверхности первого объекта в зависимости от ввода пользователя (в основном, как два магнита с бесконечной силой, но без трения).Мой подход заключается в том, чтобы взять координаты x и y второго объекта и посмотреть, какой объект имеет координату z в данных координатах x и y.Затем я перемещаю объект два в точно такую ​​же z-координату.

Я пытался использовать SCNDistanceConstraint, но это не имело никакого эффекта:

let cnstrnt = SCNDistanceConstraint(target: object1)
    cnstrnt.maximumDistance = 1
    cnstrnt.minimumDistance = 0.99
    object2?.constraints?.append(cnstrnt)

Я также пытался использовать SCNTransformConstraint без каких-либоЭффект либо:

 let transform = SCNTransformConstraint.positionConstraint(inWorldSpace: true) { (object2, vector) -> SCNVector3 in
       let z = object1?.worldPosition.z
        return SCNVector3(object2.worldPosition.x, object2.worldPosition.y, z!)
    }
    object2?.constraints?.append(transform)

Использование hitTest возвращает только результаты, которые расположены на ограничительной рамке объекта, а не на его фактической поверхности:

let hitTest = mySceneView.scene?.physicsWorld.rayTestWithSegment(from: SCNVector3((object2?.position.x)!, (object2?.position.y)!, -10), to: (object2?.position)!, options: nil)

Так как я могу получить zкоордината поверхности трехмерного объекта от оси и координаты y?Потому что тогда я смогу установить новую позицию object2 вручную.Может быть, у вас есть другой подход, более элегантный и быстрый, чем у меня?

Заранее спасибо!

...