我正在使用SceneKit并且有多个SCNNodes的应用程序,当用户点击一个时,它将按照他们的手指(使用UILongPressGestureRecognizer)。在国家开始和改变,我使用下面的代码行更改节点的位置:在不改变方向的情况下更改SCNNode位置
_currentlyMoving?.position = SCNVector3Make(worldPoint.x, worldPoint.y, worldPoint.z)
在这一行,_currentlyMoving
是SCNNode,并worldPoint我的手指的位置。
这是将节点移动到正确的位置;然而,它也似乎正在改变节点的旋转到(0,0,0)(该节点始终处于其开始旋转)。
有什么方法可以改变SCNNode的位置而不影响回转?
另外,我曾尝试以下,但它没有工作,要么(同样的事情发生):
_currentlyMoving?.transform.m41 = worldPoint.x
_currentlyMoving?.transform.m42 = worldPoint.y
_currentlyMoving?.transform.m43 = worldPoint.z
,我与节点做的唯一的另一件事是下面三行阻止它从移动中拿起:
_currentlyMoving?.physicsBody?.velocity = SCNVector3Make(0.0, 0.0, 0.0)
_currentlyMoving?.physicsBody?.velocityFactor = SCNVector3Make(0.0, 0.0, 0.0)
_currentlyMoving?.physicsBody?.angularVelocity = SCNVector4Make(0.0, 0.0, 0.0, 1.0)
您的节点是否有physicBody集?如果您正在以编程方式移动它,您是否使用“运动学”机构? – Toyos 2014-10-03 20:44:56
@Toyos它确实有一个physicsBody,但它是动态的,而不是运动学的。 – Jsdodgers 2014-10-05 18:10:47
节点的变换不应该受其位置的影响,除非你有一些限制。你能分享最小的代码来重现这个问题吗? – Gusutafu 2014-10-06 02:11:37