SceneKit将对象移动到另一个对象之上

时间:2018-12-25 17:04:23

标签: ios swift 3d scenekit

我是SceneKit的新手,正在编写游戏。 我已将两个对象加载到场景中。第一个对象不动,只有第二个。这两个对象始终必须粘在一起,但是第二个对象可以根据用户的输入在第一个对象的表面上完全自由移动(基本上就像两个具有无限功率但没有摩擦的磁体一样)。 我的方法是获取第二个对象的x和y坐标,并查看给定x和y坐标下对象的z坐标是什么。然后,将第二个对象移到完全相同的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)

那么如何从x和y坐标获取3d对象表面的z坐标?因为这样我就可以手动设置object2的新位置。 也许您有另一种方法比我的方法更优雅,更快捷?

预先感谢!

0 个答案:

没有答案