Я новичок в 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 вручную.Может быть, у вас есть другой подход, более элегантный и быстрый, чем у меня?
Заранее спасибо!